Pandas按索引删除列会丢弃所有具有相同名称的列

时间:2016-03-04 14:00:40

标签: pandas

考虑使用具有相同名称列的数据框(显然这确实发生了,目前我有这样的数据集!:()

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

1 个答案:

答案 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)

<强>更新

由于.ixdeprecated(自v 0.20.1起),您应该执行以下任何操作:

df.iloc[:,~df.columns.duplicated()]

df.loc[:,~df.columns.duplicated()]

感谢@DavideFiocco提醒我