2017-01-01 4 views
2

私は以下のような単純なデータフレームを持っています。パンダの確率

Column_3に従って、Column_1に1つの出現確率をカウントするにはどうすればよいですか?

Column_1は結果(1または0)です。

Column_2Column_3は分類の一種です。

したがって、最初の行は、建物番号Aに住んでいる人の車がLMのモデルであることを意味します。

Column_1 Column_2 Column_3 
1  A   LM 
1  B   LO  
0  C   LP 
1  D   LM 
0  A   LK 
1  A   LM 

は、私はあなたがpivot_tableを使用することができます

LM LO LP LK 
A .33    0 
B    .167 
C    0 
D .167 
+0

あなたの予想される出力は何ですか? – Zero

答えて

1

である可能性があり、結果を修正理解している場合:

print (df.pivot_table(index='Column_2', 
         columns='Column_3', 
         values='Column_1', 
         aggfunc='sum', 
         fill_value=0)) 
Column_3 LK LM LO LP 
Column_2     
A   0 2 0 0 
B   0 0 1 0 
C   0 0 0 0 
D   0 1 0 0 

groupbyunstackのもう一つの解決策:

df1 = df.groupby(['Column_2','Column_3'])['Column_1'].sum().unstack(fill_value=0) 
print (df1) 
Column_3 LK LM LO LP 
Column_2     
A   0 2 0 0 
B   0 0 1 0 
C   0 0 0 0 
D   0 1 0 0 

最終あなたがindexdivlengthによって分割することができます - それはdflengthです:

print (df1.div(len(df.index))) 
Column_3 LK  LM  LO LP 
Column_2        
A   0.0 0.333333 0.000000 0.0 
B   0.0 0.000000 0.166667 0.0 
C   0.0 0.000000 0.000000 0.0 
D   0.0 0.166667 0.000000 0.0 
+0

確率を得るには、私はColumn_1の長さで合計を1の和で除算しなければならないと思いますか? –

+0

申し訳ありませんが、なぜ0.33ですか?数式とは何ですか? – jezrael

+0

この場合、Column_1の長さは6ですので、2/6 = 0.33を割り算すると –