我有一个数据帧列表
df1 = {'col1': ['a', 'a', 'b', 'c', 'c', 'd'], '2020': [3, 4, 3, 8, 4, 5]}
df2 = {'col1': ['a', 'a', 'b', 'c', 'c', 'd'], '2021': [30, 40, 30, 80, 40, 50]}
df3 = {'col1': ['a', 'a', 'b', 'c', 'c', 'd'], '2022': [31, 41, 31, 81, 41, 51]}
listOfDf = [df1, df2, df3]
然后我把它们并排添加
sideBySideDataframe = pd.concat(listOfDf , axis=1)
这给了我这个
2020 col1 2021 col1 2022 col1
0 3 'a' 30 'a' 31 'a'
1 4 'a' 40 'a' 41 'a'
2 3 'b' 30 'b' 31 'b'
3 8 'c' 80 'c' 81 'c'
...
现在,我只想保留col1
一次。所以我试图通过索引删除col1
sideBySideDataframe = sideBySideDataframe.drop(sideBySideDataframe.columns[[1, 3]],axis = 1)
但是,这删除了所有col1
列。我试过
sideBySideDataframe = sideBySideDataframe.drop(sideBySideDataframe.columns[[1]],axis = 1)
具有相同的效果。然而,当我使用时
sideBySideDataframe = sideBySideDataframe.set_index('col1')
我得到
2020 2021 2022
col1
('a', 'a', 'a') ...
('a', 'a', 'a')
('b', 'b', 'b')
('c', 'c', 'c')
我的输出应该是
2020 2021 2022
col1
'a' ...
'a'
'b'
'c'
所以,我不知道为什么pandas
会删除所有col1
,即使我只引用了index
的col1
。有没有一种方法可以在执行pd.concat(listOfDf , axis=1)
时只保留一个重复的列名,或者我如何设置索引,这样它就不会将名称适合col1
的每列的所有值相加。
我建议您将col1
设置为索引,然后concat:
sideBySideDataframe = pd.concat([d.set_index('col1') for d in listOfDf], axis=1)
输出:
2020 2021 2022
col1
a 3 30 31
a 4 40 41
b 3 30 31
c 8 80 81
c 4 40 41
d 5 50 51