微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python – 运行平均值如果数字大于0

我的数据框中有一个由数字组成的列.我喜欢在数据框中有另一个列,它采用大于0的运行平均值,理想情况下我可以在没有迭代的情况下进行numpy. (数据很大)

Vals    Output
-350    
1000    1000
1300    1150
1600    1300
1100    1250
1000    1200
450     1075
1900    1192.857143
-2000   1192.857143
-3150   1192.857143
1000    1168.75
-900    1168.75
800     1127.777778
8550    1870

码:

list =[-350,    1000,   1300,   1600,   1100,   1000,   450,
    1900,   -2000,  -3150,  1000,   -900,   800,    8550]
    df = pd.DataFrame(data = list)

解决方法:

选项1
扩张和意味着

df.assign(out=df.loc[df.Vals.gt(0)].Vals.expanding().mean()).ffill()

如果你的DataFrame中有其他列具有NaN值,那么这个方法也会填充,所以如果这是一个问题,你可能要考虑使用这样的东西:

df['Out'] = df.loc[df.Vals.gt(0)].Vals.expanding().mean()
df['Out'] = df.Out.ffill()

这只会填写Out列.

选项2
面具:

df.assign(Out=df.mask(df.Vals.lt(0)).Vals.expanding().mean())

这两个导致:

    Vals          Out
0   -350          NaN
1   1000  1000.000000
2   1300  1150.000000
3   1600  1300.000000
4   1100  1250.000000
5   1000  1200.000000
6    450  1075.000000
7   1900  1192.857143
8  -2000  1192.857143
9  -3150  1192.857143
10  1000  1168.750000
11  -900  1168.750000
12   800  1127.777778
13  8550  1870.000000

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐