Pandas分组DataFrame自定义周期计算百分比变化报错(TypeError)解决
问题解决:分组计算指定周期的百分比变化报错
错误原因
你写的pd.Series.pct_change(periods=7)是直接调用了实例方法,但该方法需要接收一个Series实例作为self参数(即要处理的目标Series),你当前的写法只传入了periods参数,缺少了self,因此抛出TypeError。
解决方法
有三种可行的写法,推荐用第三种(transform),因为它能自动对齐原DataFrame的索引,避免索引混乱:
方法一:使用lambda函数传递参数
_df_ty['velocity_7'] = _df_ty.groupby('store')['sales'].apply(lambda x: x.pct_change(periods=7)).abs()
lambda里的x就是每个分组对应的Series,调用x.pct_change(periods=7)会自动把x作为self传入方法。
方法二:用functools.partial绑定参数
先导入partial,再绑定periods参数:
from functools import partial _df_ty['velocity_7'] = _df_ty.groupby('store')['sales'].apply(partial(pd.Series.pct_change, periods=7)).abs()
partial会帮你预先绑定periods参数,剩下的self参数会由apply自动传入每个分组的Series。
方法三:使用transform更简洁(推荐)
_df_ty['velocity_7'] = _df_ty.groupby('store')['sales'].transform(lambda x: x.pct_change(periods=7)).abs()
transform会将每个分组的计算结果映射回原DataFrame的对应位置,无需手动处理索引对齐,逻辑更清晰。
内容的提问来源于stack exchange,提问作者CapnShanty
相关产品推荐
相关产品推荐

