我的数据框看起来像这样
A B C
0 0.799 0.137 0.064
1 0.277 0.251 0.471
2 0.294 0.273 0.434
3 0.793 0.138 0.069
4 0.454 0.265 0.281
5 0.079 0.159 0.762
6 0.809 0.135 0.056
7 0.221 0.255 0.523
8 0.147 0.228 0.625
9 0.474 0.263 0.263
10 0.475 0.237 0.288
11 0.455 0.290 0.255
12 0.823 0.128 0.048
13 0.127 0.191 0.682
14 0.191 0.254 0.555
15 0.309 0.291 0.400
我的目标是生成每行中一个选项的所有可能组合的列表。就是这样的结果;
0: A
1: A
2: C
3: B
4: C
5: A
(最少6行,最多16行)
但也只是每个通用组合:
AAAAAAAAAAAAAAAA,AAAAAAAAAAAAAAAA,AAAAAAAAAAAAAAAA我还想计算每种组合的总概率。
等。有没有熊猫的方法,或者我应该使用更通用的方法?感谢。
答案 0 :(得分:1)
import pandas as pd
import numpy as np
from itertools import product
df = pd.DataFrame({"A":np.random.random(16),
"B":np.random.random(16),
"C":np.random.random(16)})
然后,为了获得所有可能的组合,我们使用产品:
comb_length = 6
combinations = []
for combination in product(["A", "B", "C"], repeat=comb_length):
combinations.append(dict(enumerate(combination)))
print(len(combinations)) # 729
它保存了所有可能的组合,例如:
print(combinations[350])
{0: 'B', 1: 'B', 2: 'A', 3: 'C', 4: 'C', 5: 'C'}
然后,如果您需要选择相应的数据,您可以:
[df.loc[x, y] for x, y in combinations[350].items()]
输出是组合[350]列(B B A C C C)的值:
[0.11852649572396512,
0.81183063774252817,
0.63510644715163156,
0.17961073510080461,
0.073763780132310774,
0.34638485836422905]
350这是一个随机组合编号。
记住comb_length = 16导致3 ^ 16(43毫安)组合,因此你可能会内存不足。