pandas groupby列缺失

时间:2016-11-30 20:14:10

标签: python pandas dataframe

如何让以下脚本中的每个名称同时包含“' YES'并且没有'算在他们的名字旁边?我需要为每个人都有一些价值,即使它是零。

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

1 个答案:

答案 0 :(得分:3)

您可以使用reindex:

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

对于此示例,带有unstack的交叉表也可以是一个选项:

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