我有一个类似于下面的数据框:
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 等),并使用行的总和创建一个新列。对于 127 种组合,尤其是具有描述性的列名称,这似乎几乎不可能完成。
创建所有组合的列表chain
+ combinations
从 itertools 中,然后对相应的列求和:
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)