【问题标题】:Pandas merge duplicate DataFrame columns preserving column namesPandas 合并重复的 DataFrame 列,保留列名
【发布时间】:2017-05-10 12:01:30
【问题描述】:

如何合并重复的 DataFrame 列并保留所有原始列名?

例如如果我有数据框

df = pd.DataFrame({"col1" : [0, 0, 1, 2, 5, 3, 7],
                   "col2" : [0, 1, 2, 3, 3, 3, 4],
                   "col3" : [0, 1, 2, 3, 3, 3, 4]})

我可以删除重复的列(是的,大数据帧的转置很慢)

df.T.drop_duplicates().T

但这只会为每个唯一列保留一个列名

    col1 col2
 0   0   0
 1   0   1
 2   1   2
 3   2   3
 4   5   3
 5   3   3
 6   7   4

如何保留合并列的信息?例如像

    [col1] [col2, col3]
 0     0         0
 1     0         1
 2     1         2
 3     2         3
 4     5         3
 5     3         3
 6     7         4

谢谢!

【问题讨论】:

  • 公平警告:您可能不想像想要的结果那样存储列标题。标题并不意味着是列表。如果您有 12 个重复的列怎么办?

标签: python pandas dataframe duplicates data-science


【解决方案1】:
# group columns by their values 
grouped_columns = df.groupby(list(df.values), axis=1).apply(lambda g: g.columns.tolist())  

# pick one column from each group of the columns
unique_df = df.loc[:, grouped_columns.str[0]]

# make a new column name for each group, don't think the list can work as a column name, you need to join them
unique_df.columns = grouped_columns.apply("-".join)

unique_df

【讨论】:

    【解决方案2】:

    我还使用了Ttuplegroupby

    def f(x):
        d = x.iloc[[0]]
        d.index = ['-'.join(x.index.tolist())]
        return d
    
    df.T.groupby(df.apply(tuple), group_keys=False).apply(f).T
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-08
      • 2022-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多