如何让以下脚本中的每个名称同时包含“' 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
答案 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