2017-09-16 104 views
-1

产生的栏“选择”每个可能的组合为每一行我有数据帧寻找这样如何大熊猫

 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,AAAAAAAAAAAAAAAB,AAAAAAAAAAAAAAAC

我也想计算每个的总概率组合。

等有熊猫的方式来做到这一点,或者我应该只使用更通用的方法?谢谢。

+2

目前尚不清楚你想要什么。你能澄清一下吗? –

回答

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 millinos)的组合,因此您可能会失去内存。