gpt4 book ai didi

python - Pandas 移动平均线 - 下降负值?

转载 作者:行者123 更新时间:2023-11-30 22:24:17 25 4
gpt4 key购买 nike

因此,在我的数据框中,我有一个名为 diff 的列,其中包含正值和负值。

date, id, diff, moving_avg
2017-01-01, 123, 5, 5
2017-01-02, 123, -3, 5
2017-01-03, 123, 4, (5+4)/2 = 4.5
2017-01-04, 123, 6, (4+6)/2 = 5
2017-01-05, 123, 3, (4+6+3)/3 = 4.33

我目前计算 3 天移动平均值为:

df['mov_avg_diff'] = df.groupby(['id'], as_index=False)[['diff']].rolling(
3, min_periods=1).mean().fillna(0).reset_index(0, drop=True)

但这将包括负值,从而使移动平均线产生偏差。我可以添加一个简单的修复程序来仅使用正值吗?

编辑:添加更多行/预期输出

最佳答案

我相信您可以使用 df[df > 0] 等 bool 数组将负值替换为 NaN。根据文档, Pandas 的方法将正确处理 NaN: https://pandas.pydata.org/pandas-docs/stable/missing_data.html

输入(pandas_data.csv):

date,id,diff
2017-01-01,123,5
2017-01-02,123,-3
2017-01-03,123,4
2017-01-04,123,6
2017-01-05,123,3
2017-01-01,124,7
2017-01-02,124,1
2017-01-03,124,-4
2017-01-04,124,6
2017-01-05,124,2

代码:

import pandas as pd

df = pd.read_csv('pandas_data.csv', header=0)

df['mov_avg_diff'] = (
df[df > 0]
.groupby(['id'], as_index=False)['diff']
.rolling(3, min_periods=1)
.mean()
.fillna(0)
.reset_index(0, drop=True)).transpose()

结果:

df

date id diff mov_avg_diff
0 2017-01-01 123 5 5.000000
1 2017-01-02 123 -3 5.000000
2 2017-01-03 123 4 4.500000
3 2017-01-04 123 6 5.000000
4 2017-01-05 123 3 4.333333
5 2017-01-01 124 7 7.000000
6 2017-01-02 124 1 4.000000
7 2017-01-03 124 -4 4.000000
8 2017-01-04 124 6 3.500000
9 2017-01-05 124 2 4.000000

关于python - Pandas 移动平均线 - 下降负值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47872305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com