如何使用python pandas从数据框中删除重复的列

时间:2013-06-05 11:13:38

标签: python pandas

通过对两列进行分组,我做了一些更改。

我使用python生成了一个文件,导致了2个重复的列。如何从数据框中删除重复的列?

5 个答案:

答案 0 :(得分:18)

使用groupby可能最容易(假设它们也有重复的名称):

In [11]: df
Out[11]:
   A  B  B
0  a  4  4
1  b  4  4
2  c  4  4

In [12]: df.T.groupby(level=0).first().T
Out[12]:
   A  B
0  a  4
1  b  4
2  c  4

如果他们有不同的名称,您可以在转置上drop_duplicates

In [21]: df
Out[21]:
   A  B  C
0  a  4  4
1  b  4  4
2  c  4  4

In [22]: df.T.drop_duplicates().T
Out[22]:
   A  B
0  a  4
1  b  4
2  c  4

通常read_csv通常会确保它们有不同的名称......

答案 1 :(得分:2)

使用大型DataFrame时,转置是一个坏主意。有关内存效率的替代方法,请参阅此答案:https://stackoverflow.com/a/32961145/759442

答案 2 :(得分:0)

这是我迄今为止找到的最好的。

remove = []
cols = df.columns
for i in range(len(cols)-1):
    v = df[cols[i]].values
    for j in range(i+1,len(cols)):
        if np.array_equal(v,df[cols[j]].values):
            remove.append(cols[j])

df.drop(remove, axis=1, inplace=True)

https://www.kaggle.com/kobakhit/santander-customer-satisfaction/0-84-score-with-36-features-only/code

答案 3 :(得分:0)

我知道这是一个老问题,但我最近遇到了同样的问题,这些解决方案都没有对我有用,或者循环建议似乎有点矫枉过正。最后,我只是找到了不需要的重复列的索引并删除了该列索引。所以,只要您知道这将起作用的列的索引(您可以通过调试或打印语句找到它):

df.drop(df.columns[i], axis=1)

答案 4 :(得分:0)

这里python pandas remove duplicate columns已经回答了。 想法是df.columns.duplicated()生成布尔向量,其中每个值表示它是否曾经查看过该列。例如,如果df具有列["Col1", "Col2", "Col1"],则它将生成[False, False, True]。让我们对其进行倒置并将其称为column_selector

使用上述向量,并使用loc的{​​{1}}方法(该方法有助于选择行和列),我们可以删除重复的列。使用df,我们可以选择列。

df.loc[:, column_selector]