11

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

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

4

5 回答 5

22

使用 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会确保他们有不同的名字......

于 2013-06-05T12:05:55.167 回答
3

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

于 2015-10-06T03:24:07.173 回答
3

这是迄今为止我发现的最好的。

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

于 2016-04-10T12:06:04.217 回答
2

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

使用上述向量并使用有助于选择行和列的loc方法,我们可以删除重复的列。我们可以选择列dfdf.loc[:, column_selector]

column_selector = ~df.columns().duplicated()
df = df.loc[:, column_selector]
于 2019-12-13T09:16:46.427 回答
0

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

df.drop(df.columns[i], axis=1)
于 2017-06-21T17:17:41.387 回答