【发布时间】:2021-12-15 09:44:52
【问题描述】:
我有一个如下图所示的数据框。
权重列本质上表示每个项目的频率,因此对于每个位置,权重总和将等于 1
请记住,这是一个简化的数据集,实际上有超过 100 列,如 value
d = {'location': ['a', 'a', 'b', 'b'],'item': ['x', 'y', 's', 'v'], 'value': [1, 5, 3, 7], 'weight': [0.9, 0.1, 0.8, 0.2]}
df = pd.DataFrame(data=d)
df
location item value weight
0 a x 1 0.9
1 a y 5 0.1
2 b s 3 0.8
3 b v 7 0.2
我目前有代码可以计算未加权数据的分组中位数、标准差、偏斜和分位数,我正在使用以下代码:
df = df[['location','value']]
df1 = df.groupby('location').agg(['median','skew','std']).reset_index()
df2 = df.groupby('location').quantile([0.1, 0.9, 0.25, 0.75, 0.5]).unstack(level=1).reset_index()
dfs = df1.merge(df2, how = 'left', on = 'location')
结果如下:
location value
median skew std 0.1 0.9 0.25 0.75 0.5
0 a 3 NaN 2.828427 1.4 4.6 2.0 4.0 3.0
1 b 5 NaN 2.828427 3.4 6.6 4.0 6.0 5.0
我想生成与上述完全相同的结果数据框,但使用weight 列进行加权统计。我该怎么做?
需要注意的另一个重要注意事项,value 经常为空,但它具有与之相关的权重。
【问题讨论】:
-
我的回答是否按预期工作?或者您认为复制观察结果有什么问题吗?
-
@Mark,据我了解,是的,这是应用权重的正确方法,只是出于好奇,您能否提供任何参考来表明这实际上是最佳实践/正确方法?跨度>
-
请给我一些时间进行研究以提供最佳答案。
-
您能否添加更多信息,例如它们是什么类型的权重(频率权重、概率权重或仅仅是重要性权重)?您可以参考this page 了解有关每种重量的更多信息。根据您的回答,可以决定我的方法是有效还是不准确。
-
嗯,是的!如果这些是频率权重,那么我的方法是正确的。只需要进行一些调整。但我想更多地了解这些空值。
values = [3, nan]与相应的权重[0.1, 0.9]的含义是什么?是不是 3 好像nan被忽略了?
标签: python pandas dataframe mean weighted-average