包括基于一组分组数据的缺失值组合

时间:2018-12-22 23:38:41

标签: python pandas

我正在使用先前的线程:Including missing combinations of values in a pandas groupby aggregation

在上面的线程中,接受的答案计算分组变量的所有可能组合。在此版本中,我想基于组分组计算组合。

让我们举个例子。

这里是输入数据框:

enter image description here

这里,一组是[Year,Quarter],即

Year  Quarter
2014  Q1
2015  Q2
2015  Q3

另一组群组是Name

Name
Adam
Smith

现在,我要应用groupbysum,以便将上述组组合的缺失值检测为NaN

以下是示例输出:

enter image description here

我将不胜感激。


以下是input格式的示例outputdict

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}}

说明:

我正在寻找一种无需熔融和浇铸的方法。即无需玩弄长而宽的格式。

2 个答案:

答案 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