2 回答
TA贡献1815条经验 获得超10个赞
IIUC,combinations
并reduce
与Series.add
from itertools import combinations
from functools import reduce
cols = df.columns.copy()
for i in range(2, len(cols) + 1):
for names in combinations(cols, i):
df[''.join(names)] = reduce(lambda cum_serie, new_serie_name: \
cum_serie.add(df[new_serie_name]),
names[1:],
df[names[0]])
print(df)
输出
A B C D AB AC AD BC BD CD ABC ABD ACD BCD ABCD
0 1 1 3 2 2 4 3 4 3 5 5 4 6 6 7
编辑
df = df.rename(columns=str).astype(str)
cols = df.columns.copy()
for i in range(2, len(cols) + 1):
for names in combinations(cols, i):
df[' + '.join(names)] = reduce(lambda cum_serie, new_serie_name: \
cum_serie.str.cat(df[new_serie_name], ' + '),
names[1:],
df[names[0]])
print(df)
A B C D A + B A + C A + D B + C B + D C + D A + B + C A + B + D \
0 1 1 3 2 1 + 1 1 + 3 1 + 2 1 + 3 1 + 2 3 + 2 1 + 1 + 3 1 + 1 + 2
A + C + D B + C + D A + B + C + D
0 1 + 3 + 2 1 + 3 + 2 1 + 1 + 3 + 2
TA贡献1853条经验 获得超9个赞
我认为使用combinations是正确的方法。
首先创建列组合列表:
col_combs = list(combinations(df.columns, 2))
然后要获取仅包含任何给定组合的那些列的 df,将组合元组转换为列表,并将其传递给数据框。
cols = list(col_combs[0]
comb_df = `df[col_combs)]
下面是一个最小示例,说明如何为 2 列的每个组合存储单独的数据框:
col_combs = list(combinations(df.columns, 2))
comb_dfs = []
for cols in col_combs:
temp = df[list(cols)].copy()
comb_dfs.append(temp)
为了让它适用于更多的列组合,您只需combinations使用您想要的值运行几个不同的值,并在制作数据框之前将所有结果收集到一个列表中。
添加回答
举报