考虑使用具有相同名称列的数据框(显然这确实发生了,目前我有这样的数据集!:()
>>> df = pd.DataFrame({"a":range(10,15),"b":range(5,10)})
>>> df.rename(columns={"b":"a"},inplace=True)
df
a a
0 10 5
1 11 6
2 12 7
3 13 8
4 14 9
>>> df.columns
Index(['a', 'a'], dtype='object')
我希望当按索引删除时,只有具有相应索引的列才会消失,但显然情况并非如此。
>>> df.drop(df.columns[-1],1)
0
1
2
3
4
有没有办法摆脱具有重复列名的列?
编辑:我为第一列选择了误导性值,现在已修复
EDIT2:预期结果是
a
0 10
1 11
2 12
3 13
4 14
答案 0 :(得分:11)
实际上只是这样做:
In [183]:
df.ix[:,~df.columns.duplicated()]
Out[183]:
a
0 0
1 1
2 2
3 3
4 4
因此,此索引所有行,然后使用从duplicated
生成的列掩码,并使用~
duplicated
的输出:
In [184]:
df.columns.duplicated()
Out[184]:
array([False, True], dtype=bool)
<强>更新强>
由于.ix
为deprecated(自v 0.20.1
起),您应该执行以下任何操作:
df.iloc[:,~df.columns.duplicated()]
或
df.loc[:,~df.columns.duplicated()]
感谢@DavideFiocco提醒我