如何将列值作为rolling或shift方法的参数传入?
问题原因
rolling()的window参数和shift()的periods参数仅支持标量值,无法直接传入Series(即每行使用不同的窗口大小/偏移量),这是你代码报错的核心原因。
解决方案
基于你的数据和需求,提供两种场景的实现方式:
1. 按pos指定偏移量实现shift效果
逐行计算偏移后的值,偏移后索引小于0时返回NaN:
df['shift_result'] = [ df.A.iloc[i - p] if i - p >= 0 else np.nan for i, p in enumerate(df.pos) ]
2. 按pos指定窗口大小实现rolling max效果
假设pos代表窗口包含当前行在内的向前行数(比如pos=2取当前行+前2行共3行的最大值):
df['rolling_max'] = [ df.A.iloc[max(0, i - p):i+1].max() for i, p in enumerate(df.pos) ]
如果pos=0需要返回NaN,可调整为:
df['rolling_max'] = [ df.A.iloc[max(0, i - p):i+1].max() if p != 0 else np.nan for i, p in enumerate(df.pos) ]
内容的提问来源于stack exchange,提问作者July
相关产品推荐
相关产品推荐

