【发布时间】:2021-08-17 18:47:21
【问题描述】:
我需要一些帮助来尝试根据日期时间索引和另一个“质量”列获取列的加权平均值。 例如:
d = {'date': ['2021-08-01 12:00:00', '2021-08-01 13:00:00', '2021-08-01 14:00:00', '2021-08-02 15:00:00', '2021-08-02 16:00:00', '2021-08-02 17:00:00'],
'mass': [23, 40, 10, 12, 15, 11],
'%': [0.4, 0.7, 0.9, 0.1, 0.2, 0.8]
}
df = pd.DataFrame(data=d)
df.set_index('date')
我需要的是每 2 小时获得一次“%”的加权平均值,作为权重列的“质量”。
我需要这样的输出:
date(index) | mass | %
2021-08-01 13:00:00 | 43 | 0.865
2021-08-02 15:00:00 | 22 | 0.464
2021-08-02 17:00:00 | 26 | 0.454
按加权平均计算“%”:
0.865 = ((23 x 0.4) + (40 x 0.7))/ (40 + 23)
请注意,我的索引中可能没有连续的日期时间,例如,由于缺少数据,我可能会跳过几个小时,甚至几天。在这种情况下,如果没有要计算的数据,我需要输出为 NaN。 如果只有一行数据,则假设该行是该期间的加权平均值...
周期也可能有所不同,从 2 小时到 12 个月不等...
在上一个问题上,有人已经帮我解决了这个问题:
out = df.assign(k=df['mass'].mul(df['%']))[['mass','k']].sum(level=0)
out['%'] = out.pop('k').div(out['mass'])
不过,这仅在我有重复索引时才有效,而这次不是这样。
【问题讨论】:
-
我们应该如何确定间隔开始和结束。我的意思是为什么预期的输出从 13:00:00 而不是 12:00:00 开始。请为可能的数据框提供此信息。
-
开始和结束的间隔由一天的开始和结束给出......总是从 00:00 开始,到 23:00 结束。通常我需要按天或每 4 或 8 小时分组
标签: python pandas dataframe weighted-average