繁体   English   中英

删除列会产生意想不到的结果

[英]Dropping column gives unexpected result

我有一个数据框列表

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') 

我的 output 应该是

                  2020   2021   2022
col1
'a'               ...
'a'
'b'
'c'

Sooo,我不确定为什么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)

Output:

      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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM