我正在使用先前的线程:Including missing combinations of values in a pandas groupby aggregation
在上面的线程中,接受的答案计算分组变量的所有可能组合。在此版本中,我想基于组分组计算组合。
让我们举个例子。
这里是输入数据框:
这里,一组是[Year,Quarter]
,即
Year Quarter
2014 Q1
2015 Q2
2015 Q3
另一组群组是Name
:
Name
Adam
Smith
现在,我要应用groupby
和sum
,以便将上述组组合的缺失值检测为NaN
以下是示例输出:
我将不胜感激。
以下是input
格式的示例output
和dict
:
input=
{'Year': {0: 2014, 1: 2014, 2: 2015, 3: 2015, 4: 2015},
'Quarter': {0: 'Q1', 1: 'Q1', 2: 'Q2', 3: 'Q2', 4: 'Q3'},
'Name': {0: 'Adam', 1: 'Smith', 2: 'Adam', 3: 'Adam', 4: 'Smith'},
'Value': {0: 2, 1: 3, 2: 4, 3: 5, 4: 5}}
output=
{'Year': {0: 2014, 1: 2014, 2: 2015, 3: 2015, 4: 2015, 5: 2015},
'Quarter': {0: 'Q1', 1: 'Q1', 2: 'Q2', 3: 'Q2', 4: 'Q3', 5: 'Q3'},
'Name': {0: 'Adam', 1: 'Smith', 2: 'Adam', 3: 'Smith', 4: 'Smith', 5: 'Adam'},
'Value': {0: 2.0, 1: 3.0, 2: 9.0, 3: nan, 4: 5.0, 5: nan}}
说明:
我正在寻找一种无需熔融和浇铸的方法。即无需玩弄长而宽的格式。
答案 0 :(得分:1)
您发布的示例帖子是正确的答案:groupby
得到sum
然后得到unstack
来找到缺失值,然后得到stack
并带有参数dropna=False
这是stack
df.groupby(['Year','Quarter','Name']).sum().unstack().stack(dropna=False).reset_index()
Year Quarter Name Value
0 2014 Q1 Adam 2.0
1 2014 Q1 Smith 3.0
2 2015 Q2 Adam 9.0
3 2015 Q2 Smith NaN
4 2015 Q3 Adam NaN
5 2015 Q3 Smith 5.0
答案 1 :(得分:1)
使用pivot_table
,PS可以在末尾添加reset_index
df.pivot_table(index=['Year','Quarter'],columns='Name',values='Value',aggfunc='sum').stack(dropna=False)
Year Quarter Name
2014 Q1 Adam 2.0
Smith 3.0
2015 Q2 Adam 9.0
Smith NaN
Q3 Adam NaN
Smith 5.0
dtype: float64