我有一个类似于以下内容的数据框:
Wave A B C
340 77 70 15
341 80 73 15
342 83 76 16
343 86 78 17
我想生成将包含现有列的所有可能组合的列。我在这里显示了3个列,但在我的实际数据中,我有7列,因此共有127种组合。所需的输出如下:
Wave A B C AB AC AD BC ... ABC
340 77 70 15 147 92 ...
341 80 73 15 153 95 ...
342 83 76 16 159 99 ...
我实现了一个效率很低的版本,用户输入组合(AB,AC等),然后使用行的总和创建一个新的col。对于127种组合(尤其是具有描述性的列名),这似乎几乎是不可能实现的。
使用itertools中的chain
+创建所有组合的列表combinations
,然后对相应的列求和:
from itertools import combinations, chain
cols = [*df.iloc[:,1:]]
l = list(chain.from_iterable(combinations(cols, n+2) for n in range(len(cols))))
#[('A', 'B'), ('A', 'C'), ('B', 'C'), ('A', 'B', 'C')]
for items in l:
df[''.join(items)] = df.loc[:, items].sum(1)
Wave A B C AB AC BC ABC
0 340 77 70 15 147 92 85 162
1 341 80 73 15 153 95 88 168
2 342 83 76 16 159 99 92 175
3 343 86 78 17 164 103 95 181
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句