Pandas rolling函数报错:Wrong number of items passed 2, placement implies 1
问题原因及解决方法
错误出在你给groupby加了as_index=False参数,导致执行rolling(...).mean()后返回的是包含两列的DataFrame(一列是country,一列是计算出的移动均值),而你要给df['ma']赋值的是一维的Series,所以才会报“传入2个元素,但只需要1个”的错。
两种修复方法
方法1:去掉as_index=False,处理索引后赋值
df['ma'] = df.groupby('country')['gdp'].rolling(3, min_periods=1).mean().reset_index(drop=True)
去掉as_index=False后,groupby的结果会把country作为索引的一部分,计算完移动均值后用reset_index(drop=True)去掉多余索引,得到纯数值的Series,就能顺利赋值给新列。
方法2:用transform直接匹配原索引(更推荐)
df['ma'] = df.groupby('country')['gdp'].transform(lambda x: x.rolling(3, min_periods=1).mean())
transform会自动把分组内的计算结果对应回原DataFrame的每一行,不需要手动处理索引,代码更简洁直观。
修复后运行,你会得到正确的移动均值列:
country year gdp ma 0 US 1990 1.2 1.200000 1 US 1991 1.4 1.300000 2 US 1992 1.7 1.433333 3 US 1993 2.1 1.733333 4 US 1994 2.3 2.033333 5 US 1995 1.9 2.100000 6 FR 1990 4.1 4.100000 7 FR 1991 4.6 4.350000 8 FR 1992 4.3 4.333333 9 FR 1993 4.4 4.433333
内容的提问来源于stack exchange,提问作者ps0604
相关产品推荐
相关产品推荐

