我有以下数据帧:
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”)
这是所需的数据帧:
^{pr2}$使用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)
但是,我不知道如何以pythonic的方式扩展此代码,以解释具有更大列数的DataFrame。有没有一种方法可以使下面的代码更加python,并扩展它以用于大量列?或者有没有更有效的方法来生成这些组合?在
我们需要首先基于列创建
combination
,然后创建数据帧你很亲密:
有一点需要注意的是,如果将列与
_
组合,而列名本身可以包含_
,那么迟早会有列名冲突的。在相关问题 更多 >
编程相关推荐