【问题标题】:How to remove duplicate columns from a dataframe using python pandas如何使用 python pandas 从数据框中删除重复的列
【发布时间】:2013-06-01 01:34:17
【问题描述】:

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

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

【问题讨论】:

  • 他们有相同的列名吗?

标签: python pandas


【解决方案1】:

使用 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 通常会确保它们具有不同的名称...

【讨论】:

  • 仅供参考@Andy,0.11.1 中有一个新选项可以控制这个mangle_dup_cols;默认是 TO mangle(例如,产生唯一的 cols),在 0.12 中,这将更改为保留 dups
【解决方案2】:

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

【讨论】:

【解决方案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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

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

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

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

      【讨论】:

      • 这是最好的答案,因为它实际上删除了重复的列。我见过的大多数其他答案都会放弃原来的重复的。
      猜你喜欢
      • 1970-01-01
      • 2021-06-14
      • 1970-01-01
      • 1970-01-01
      • 2019-05-04
      • 2021-12-06
      • 1970-01-01
      • 2018-12-21
      • 1970-01-01
      相关资源
      最近更新 更多