pandas groupby列丢失
问题描述:
如何获得以下脚本中的每个单独名称,以便在其名称旁边同时包含“是”和“否”?即使它是零,我也需要为每个人都提供一些价值。pandas groupby列丢失
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
答
您可以使用重建索引:
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
在这个例子中,交叉与拆散也可以是一种选择:
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
谢谢!这正是我所期待的。 – Daniel
很棒的回答。 为了纪录,这里的reindex解决方案比交叉表快4倍(2ms与8ms) –