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

Rob*_*eth 10 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')
Run Code Online (Sandbox Code Playgroud)

我希望当按索引删除时,只有具有相应索引的列才会消失,但显然情况并非如此.

>>> df.drop(df.columns[-1],1)

0
1
2
3
4
Run Code Online (Sandbox Code Playgroud)

有没有办法摆脱具有重复列名称的列?

编辑:我选择第一列的误导值,现在修复

EDIT2:预期的结果是

  a
0 10
1 11
2 12 
3 13
4 14
Run Code Online (Sandbox Code Playgroud)

EdC*_*ica 14

实际上只是这样做:

In [183]:
df.ix[:,~df.columns.duplicated()]

Out[183]:
   a
0  0
1  1
2  2
3  3
4  4
Run Code Online (Sandbox Code Playgroud)

所以这个索引所有行然后使用从中生成的列掩码duplicated并使用反转掩码~

输出来自duplicated:

In [184]:
df.columns.duplicated()

Out[184]:
array([False,  True], dtype=bool)
Run Code Online (Sandbox Code Playgroud)

UPDATE

由于.ix弃用(因为V 0.20.1),你应该做到以下任何一项:

df.iloc[:,~df.columns.duplicated()]
Run Code Online (Sandbox Code Playgroud)

要么

df.loc[:,~df.columns.duplicated()]
Run Code Online (Sandbox Code Playgroud)

感谢@DavideFiocco提醒我