【发布时间】:2019-11-17 05:32:59
【问题描述】:
我有以下数据框:
A B C
0 1 3 3
1 1 9 4
2 4 6 3
我想创建这些列的所有可能的唯一组合不重复,这样我最终会得到一个包含以下数据的数据框:A、B、C、A+B、A+ C、B+C、A+B+C。 我不想以任何组合重复任何列,例如A+A+B+C 或 A+B+B+C.
我还希望数据框中的每一列都标有相关的变量名称(例如,对于 A + B 的组合,列名称应为“A_B”)
这是所需的数据帧:
A B C A_B A_C B_C A_B_C
0 1 1 4 2 5 5 6
1 3 9 6 12 9 15 18
2 3 4 3 7 6 7 10
使用 itertools 只需 3 个变量,这相对容易,我使用了以下代码:
import pandas as pd
import itertools
combos_2 = pd.DataFrame({'{}_{}'.format(a, b):
df[a] + df[b]
for a, b in itertools.combinations(df.columns, 2)})
combos_3 = pd.DataFrame({'{}_{}_{}'.format(a, b, c):
df[a] + df[b] + df[c]
for a, b, c in itertools.combinations(df.columns, 3)})
composites = pd.concat([df, combos_2, combos_3], axis=1)
但是,我不知道如何以 Python 方式扩展此代码,以解决具有更多列数的 DataFrame。有没有办法让下面的代码更 Pythonic 并扩展它以用于大量列?或者有没有更有效的方法来生成组合?
【问题讨论】: