python - Pandas 对包含特定值的行进行加权平均值

标签 python pandas group-by row

我有一个按日期索引的数据框,如下所示:

date       id1 id2  id3   identifier  x_times  value
2016-01-01 123 1234 12345 a           21       56
2016-01-01 123 1234 12345 b           2        78
2016-01-01 123 1234 12345 c           10       23

我需要进行加权平均计算,其中每个日期的标识符只有 a 和 b。计算应该是:

((56 * 21) + (78 * 2))/(21 + 2) = 57.91

输出:

date       id1 id2  id3   identifier  x_times  value  weighted_avg
2016-01-01 123 1234 12345 a           21       56     57.91
2016-01-01 123 1234 12345 b           2        78     57.91
2016-01-01 123 1234 12345 c           10       23

我已经尝试过分组和求和,但我正在努力将数据帧与加权平均值重新连接在一起。

执行此计算的最简单方法是什么?谢谢!

最佳答案

您可以使用 isin 来做到这一点方法将原始数据帧子集为较小的数据帧。然后您可以使用该子集数据框进行计算,然后使用 loc您可以将其分配给原始数据框:

subs = df.identifier.isin(['a','b'])
df_subs = df[subs]
df.loc[subs, 'weighted_avg'] = (df_subs.x_times * df_subs.value).sum() / df_subs.x_times.sum()

In [670]: df
Out[670]: 
            id1   id2    id3 identifier  x_times  value  weighted_avg
date                                                                 
2016-01-01  123  1234  12345          a       21     56     57.913043
2016-01-01  123  1234  12345          b        2     78     57.913043
2016-01-01  123  1234  12345          c       10     23           NaN

关于python - Pandas 对包含特定值的行进行加权平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34570681/

相关文章:

python - 将字符串转换为元组列表

python - Pandas 在夜间重新采样

python - 计算 Pandas 地理密度的有效方法?

python - 将累积均值函数应用于分组对象

python - 无法在我的 django 模板中加载图像

列名中带有空格的python数据框查询

python - 为什么提早返回比其他方法慢?

python / Pandas : convert month int to month name

MySQL,从同一个表中选择 2 个以上匹配项

pandas - 如何分组并创建字符串列表