Python 如何从具有相同标签的列的数据框中删除列?

Python 如何从具有相同标签的列的数据框中删除列?,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据框,其中一些列标签出现多次(即,一些列具有相同的标签)。这给我带来了问题——我可能会单独发布更多关于这方面的信息,因为有些行为似乎有点奇怪,但这里我只想问一下删除其中一些列的问题。也就是说,对于多次出现的每个列标签,我想删除除其标题的第一列以外的所有列。这里有一个例子: In [5]: arr = np.array([[0.0, 1.0, 2.0, 3.0], [4.0, 5.0, 6.0, 7.0]]) In [6]: df = pd.DataFrame(data=arr, co

我有一个数据框,其中一些列标签出现多次(即,一些列具有相同的标签)。这给我带来了问题——我可能会单独发布更多关于这方面的信息,因为有些行为似乎有点奇怪,但这里我只想问一下删除其中一些列的问题。也就是说,对于多次出现的每个列标签,我想删除除其标题的第一列以外的所有列。这里有一个例子:

In [5]: arr = np.array([[0.0, 1.0, 2.0, 3.0], [4.0, 5.0, 6.0, 7.0]])

In [6]: df = pd.DataFrame(data=arr, columns=['A', 'C', 'E', 'A'])

In [7]: df
Out[7]:
   A  C  E  A
0  0  1  2  3
1  4  5  6  7
如果使用标签删除列,则删除以该标签为首的所有列:

In [9]: df.drop('A', axis=1)
Out[9]:
   C  E
0  1  2
1  5  6
所以我想我应该尝试按列索引删除,但这也会删除以该标签为首的所有列:

In [12]: df.drop(df.columns[3], axis=1)
Out[12]:
   C  E
0  1  2
1  5  6
我如何做我想做的事情,即,对于每个这样的标签,删除除一列之外的所有列?对于上面的示例,我希望以以下内容结束:

   A  C  E
0  0  1  2
1  4  5  6
目前,我已将这些列重新标记,如下所示:

columns = {}
new_columns = []
duplicate_num = 0
for n in df.columns:
    if n in columns:
        new_columns.append("duplicate%d" % (duplicate_num))
        duplicate_num += 1
    else:
        columns[n] = 1
        new_columns.append(n)
df.columns = new_columns
这很适合我的需要,但似乎不是最好/最干净的解决方案。谢谢

编辑:我不认为这是另一个问题的重复。首先,它处理的是重复的列,而不是重复的列标签。另一方面,建议的解决方案涉及转置数据帧(两次),但正如这里提到的,转置大数据帧是低效的,事实上我正在处理大数据帧

In [18]:  
df.ix[: , ~df.columns.duplicated()]
Out[18]:
    A   C   E
0   0   1   2
1   4   5   6
解释
正如您在这里看到的,您首先需要检查列名是否重复,请注意,我在函数的开头添加了
~

然后,您可以使用非重复值对列进行切片

我需要列标签的唯一性。现在,我想删除组中除第一列以外的所有列(我在OP中说明了这一点)。(这可能会改变,在这种情况下,我将不得不调整解决方案,但我现在不担心这一点。)这会执行我指定的操作(除去每个组中的第一列以外的所有列)。而且相当简洁。谢谢,我可能最终会同意的。理想情况下,我希望drop()方法有一些细微的变化,因为这似乎非常接近我想要的。似乎应该有某种方法通过指定列的(数字)索引来删除列,而不是删除所有类似标记的列。实际上,drop函数没有将索引作为参数,我尝试将
int
传递给
drop
,但它什么也没做,我不知道你为什么喜欢按索引删除列这不是因为我更喜欢使用索引,我只想说“删除第三列”,而不是“删除第三列上有标签的所有列”。
In [19]:
~df.columns.duplicated()
Out[19]:
array([ True,  True,  True, False], dtype=bool)