2016-11-30 22 views
1

次のスクリプトの個々の名前のそれぞれに、名前の横に「はい」と「いいえ」の両方が含まれるようにするにはどうすればよいですか?それがゼロであっても、私はそれぞれの価値を持っている必要があります。pandas groupby columns missing

import pandas as pd 
import numpy as np 

df = pd.DataFrame({'names': ['Charlie', 'Charlie', 'Charlie', 'Charlie', 'Bryan', 
          'Bryan', 'Bryan', 'Bryan', 'Jaimie', 'Jaimie', 
          'Jaimie', 'Jaimie'], 
        'passed': ['YES', 'YES', 'YES', 'YES', 'NO', 'NO', 'NO', 'NO', 
           'YES', 'NO', 'YES', 'NO']}) 

df2 = pd.DataFrame(df.groupby([df['names'], df['passed']]).size()) 
df2.columns = ['Count'] 

print(df2) 

   Count 
names passed  
Bryan NO   4 
Charlie YES   4 
Jaimie NO   2 
     YES   2 

答えて

3

あなたはREINDEX使用することができます。

pd.crosstab(df['passed'], df['names']).unstack() 
Out: 
names passed 
Bryan NO  4 
     YES  0 
Charlie NO  0 
     YES  4 
Jaimie NO  2 
     YES  2 
dtype: int64 
012:この例では

df2 
Out: 
       Count 
names passed  
Bryan NO   4 
Charlie YES   4 
Jaimie NO   2 
     YES   2 

idx = pd.MultiIndex.from_product([df['names'].unique(), df['passed'].unique()]) 

df2.reindex(idx, fill_value=0) 
Out: 
      Count 
Charlie YES  4 
     NO  0 
Bryan YES  0 
     NO  4 
Jaimie YES  2 
     NO  2 

を、スタック解除とのクロス集計もオプションで可能

+0

ありがとうございます!それはまさに私が探していたものです。 – Daniel

+2

偉大な答え。 レコードの場合、ここでの再インデックスソリューションはクロスタブより約4倍高速です(2ms対8ms) –

関連する問題