【发布时间】:2018-06-26 17:18:09
【问题描述】:
我正在尝试在我的 pandas 数据帧的加权平均值之上做加权标准差。我有一个pandas 数据框,例如:
import numpy as np
import pandas as pd
df = pd.DataFrame({"Date": pd.date_range(start='2018-01-01', end='2018-01-03 18:00:00', freq='6H'),
"Weight": np.random.uniform(3, 5, 12),
"V1": np.random.uniform(10, 15, 12),
"V2": np.random.uniform(10, 15, 12),
"V3": np.random.uniform(10, 15, 12)})
目前,为了获得加权平均值,受this post 的启发,我正在执行以下操作:
def weighted_average_std(grp):
return grp._get_numeric_data().multiply(grp['Weight'], axis=0).sum()/grp['Weight'].sum()
df.index = df["Date"]
df_agg = df.groupby(pd.Grouper(freq='1D')).apply(weighted_average_std).reset_index()
df_agg
我从哪里得到以下信息:
Date V1 V2 V3 Weight
0 2018-01-01 11.421749 13.090178 11.639424 3.630196
1 2018-01-02 12.142917 11.605284 12.187473 4.056303
2 2018-01-03 12.034015 13.159132 11.658969 4.318753
我想修改weighted_average_std,使其返回除weighted average 之外的每一列的标准差。这个想法是以矢量化的方式使用每个组的加权平均值。 Weighted Standard Deviation 的新列名称可以是 V1_WSD、V2_WSD 和 V3_WSD。
PS1:This post 通过加权标准差理论。
PS2:df_agg 中的列 Weight 没有意义。
【问题讨论】:
标签: python pandas grouping aggregate weighted-average