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)将它们组合在一起