【问题标题】:Including missing combination of values based on a group of grouped data包括基于一组分组数据的缺失值组合
【发布时间】:2018-12-23 09:53:39
【问题描述】:

我正在扩展之前的帖子:Including missing combinations of values in a pandas groupby aggregation

在上述线程中,接受的答案计算分组变量的所有可能组合。在这个版本中,我想根据组来计算组合。

举个例子吧。

这是输入数据框:

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

Year  Quarter
2014  Q1
2015  Q2
2015  Q3

另一组群是Name

Name
Adam
Smith

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

这是示例输出:

我将不胜感激。


这是inputoutput 格式的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}}

澄清:

我正在寻找一种无需熔化和铸造的方法。即不玩长格式和宽格式。

【问题讨论】:

    标签: python pandas


    【解决方案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
    

    【讨论】:

    • 谢谢克里斯。有趣的是,我认为问题在于该线程上的方法 2 不起作用。我看到方法 1 有效。
    【解决方案2】:

    使用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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-22
      • 1970-01-01
      • 2022-06-27
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      相关资源
      最近更新 更多