删除列会在Python Pandas数据帧中产生意外结果



我有一个数据帧列表

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,即使我只引用了indexcol1。有没有一种方法可以在执行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

最新更新