【问题标题】:Weighted average grouping by date (in index) in pandas DataFrame (different operations per column)pandas DataFrame中按日期(在索引中)的加权平均分组(每列不同的操作)
【发布时间】:2021-05-17 14:58:15
【问题描述】:

我有一个每天有几行的数据框,一个“质量”列和一个“%”值,需要根据质量作为加权平均值来考虑;和质量列总和...创建一个包含所有值的新数据框。

d = {'date': [1, 1, 1, 2, 2], 'mass': [3, 40, 10, 12, 15], '%': [0.4, 0.7, 0.9, 0.1, 0.2]}
df = pd.DataFrame(data=d)
df.set_index('date')

我需要这样的输出:

date(index) | mass | %
1           |  53  | 0.72
2           |  27  | 0.46

按加权平均值计算“%”:

0.72 = ((0.4 * 3) + (0.7 * 40) + (0.9 * 10))/(3 + 40 +10)

而且每天的质量总和。

【问题讨论】:

    标签: python pandas dataframe weighted-average


    【解决方案1】:

    将 2 列相乘,然后 groupby 与聚合,然后相除:

    #df = df.set_index('date')
    out = df.assign(k=df['mass'].mul(df['%']))[['mass','k']].sum(level=0)
    
    out['%'] = out.pop('k').div(out['mass'])
    

    print(out)
    
          mass         %
    date                
    1       53  0.720755
    2       27  0.155556  #<- Note that ((12*.1)+(15*.2))/(15+12) != 0.46
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-25
      • 2016-01-25
      • 2021-01-20
      相关资源
      最近更新 更多