【问题标题】:Combine all column in df with pandas (itertools)将 df 中的所有列与 pandas (itertools) 结合
【发布时间】:2020-12-08 20:29:19
【问题描述】:

您好,我有一个 df,例如:

COL1 COL2 COL3 COL4 
A    B    C    D

如何获得包含列之间所有组合的 nex df?

得到

COL1_COL2 COL1_COL3 COL1_COL4 COL2_COL3 COL2_COL4 COL3_COL4 
['A','B']['A','C']  ['A','D'] ['B','C'] ['B','D'] ['C','D']

我想我们可以使用 itertool 吗?

【问题讨论】:

    标签: python-3.x pandas combinations


    【解决方案1】:

    itertools 在这里确实很有用

    from itertools import combinations
    columns = [df[c] for c in df.columns]
    
    column_pairs = ([pd.DataFrame(
            columns = [pair[0].name + '_' + pair[1].name], 
            data= pd.concat([pair[0],pair[1]],axis=1)
        .apply(list,axis=1)) 
        for pair in combinations(columns, 2)]
        )
    
    pd.concat(column_pairs, axis = 1)
    

    生产

        COL1_COL2    COL1_COL3    COL1_COL4    COL2_COL3    COL2_COL4    COL3_COL4
    --  -----------  -----------  -----------  -----------  -----------  -----------
     0  ['A', 'B']   ['A', 'C']   ['A', 'D']   ['B', 'C']   ['B', 'D']   ['C', 'D']
     1  ['a', 'b']   ['a', 'c']   ['a', 'd']   ['b', 'c']   ['b', 'd']   ['c', 'd']
    

    (我用 a、b、c、d 在原始 df 中添加了另一行,以确保它在这种稍微更一般的情况下工作)

    代码相当简单。 columns 是原始数据帧的列列表,每个列都为 pd.Seriescombinations(columns, 2) 枚举所有这些对。 pd.DataFrame(columns = [pair[0].name + '_' + pair[1].name], data= pd.concat([pair[0],pair[1]],axis=1).apply(list,axis=1)) 将元组 pair 中的第一列和第二列组合成具有组合名称和值的单列 df。最后pd.concat(column_pairs, axis = 1)将它们组合在一起

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-31
      • 1970-01-01
      • 2019-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多