首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >RollingGroupby的估计加权平均值

RollingGroupby的估计加权平均值
EN

Stack Overflow用户
提问于 2018-06-07 04:53:05
回答 1查看 58关注 0票数 0

我想计算RollingGroupby对象的加权平均值。不幸的是,我得到了一个错误:

代码语言:javascript
复制
only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices

这是我的代码:

代码语言:javascript
复制
np.random.seed(9999)
df = pd.DataFrame(np.random.random(20).reshape(10, 2), columns = ['val1', 'val2'])
df['id'] = np.repeat([1, 2], 5)
df['wt'] = [1, 2] * 5

def weighted_average(data, value, weight):
    return np.average(data[value], weights = data[weight], axis = 0)

dfwavg = df.groupby('id')[['val1', 'wt']]\
        .rolling(window=2, min_periods=1)\
        .apply(weighted_average, 'wt')

有人知道问题出在哪里吗?谢谢。

编辑

如果一个解决方案使用现有的结构(使用group.by.rolling.apply),那就更好了。换句话说,最好的选择可能是在apply()中嵌套一个修改过的函数。

EN

回答 1

Stack Overflow用户

发布于 2018-06-07 05:07:50

像这样吗?

代码语言:javascript
复制
pd.concat([(x.val1*x.wt).rolling(window=2,min_periods=1).sum()/x.wt.rolling(window=2,min_periods=1).sum() for _,x in df.groupby('id')])
Out[592]: 
0    0.823389
1    0.295437
2    0.072459
3    0.333050
4    0.445683
5    0.913049
6    0.704820
7    0.317114
8    0.325059
9    0.179366
dtype: float64
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50729425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档