pandas DataFrame中按日期(在索引中)的加权平均分组(每列不同的操作)
Posted
技术标签:
【中文标题】pandas DataFrame中按日期(在索引中)的加权平均分组(每列不同的操作)【英文标题】:Weighted average grouping by date (in index) in pandas DataFrame (different operations per column) 【发布时间】: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)
而且每天的质量总和。
【问题讨论】:
【参考方案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
【讨论】:
以上是关于pandas DataFrame中按日期(在索引中)的加权平均分组(每列不同的操作)的主要内容,如果未能解决你的问题,请参考以下文章
遍历 Pandas Dataframe 中定义的日期时间索引范围
Pandas Dataframe .loc + 更新非唯一日期时间索引?
pandas使用reindex函数为日期索引中有缺失日期的dataframe进行索引重置(所有日期都连续)并使用fill_value参数为行进行默认填充