2017-09-16 105 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)的組合,因此您可能會失去內存。