如何在pandas中实现带Flag条件的迭代式4窗口滑动平均计算
解决方案
这种递归式滚动平均的计算逻辑因为每一步输出都会作为后续计算的输入,无法直接用pandas内置的rolling()方法实现,可通过以下方式完成:
完整实现代码
import pandas as pd import numpy as np # 构造样例数据 df = pd.DataFrame({ 'Row': range(1, 10), 'Flag': [False]*5 + [True]*4, 'Value': [3, 1, 2, 3, 5] + [np.nan]*4 }) window = 4 # 遍历所有需要计算的行 for calc_idx in df[df['Flag'] == True].index: # 取当前行前4行的Value计算平均值,写入当前行 df.loc[calc_idx, 'Value'] = df.loc[calc_idx - window : calc_idx -1, 'Value'].mean() # 按需保留两位小数 df['Value'] = df['Value'].round(2)
逻辑说明
- 遍历Flag为True的行时,每一步计算出的平均值会直接写入Value列,后续行取值时会自动包含上一步的计算结果,完全匹配要求的计算规则
- 实现逻辑简单清晰,常规数据规模下执行效率足够,不需要引入复杂的自定义窗口函数
内容的提问来源于stack exchange,提问作者abhi_infinity
相关产品推荐
相关产品推荐

