python-3.x - 将 df 中的所有列与 Pandas 结合(itertools)

标签 python-3.x pandas combinations

您好,我有一个 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 吗?

最佳答案

确实,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.Series , 原始数据帧。 combinations(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)将它们组合在一起

关于python-3.x - 将 df 中的所有列与 Pandas 结合(itertools),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65206420/

相关文章:

python - 根据条件从单元格内停止执行 Colab notebook

python - 测试在python中调用两次的函数

python - 如何使 matplotlib 标题可搜索?

python - 有没有一种Python式的方法来迭代两个列表的差异?

python - 函数是任意许多其他函数的总和

python - 使用 zip 时出现输入错误

python - 基于忽略缺失值的多个条件的新列

python - 在 Pyspark 中将 Pandas Dataframe 转换为 Spark Dataframe 时出现类型错误

c# - 从两个列表中计算所有可能的项目对?

R——比较计算的相关性