如何将指定Pandas分组聚合代码转为自定义函数?解决返回None问题
解决Pandas分组聚合自定义函数返回None的问题
你的函数返回None的核心原因是没有在函数末尾添加return语句,Pandas的分组聚合操作会生成新的DataFrame,但如果函数不主动返回这个结果,Python会默认返回None。
错误示例(导致返回None)
你可能写出了类似这样的函数:
def agg_monthly(df): wkly = (df.groupby(['Year','Month'], as_index=False).agg( P_HIGH=('High', 'max'), D_HIGH=('High', 'idxmax'), P_LOW=('Low', 'min'), D_LOW=('Low', 'idxmin') )) # 缺少return语句,函数默认返回None
正确的自定义函数写法
只需要在函数末尾添加return wkly,返回聚合后的DataFrame即可:
def agg_monthly(df): wkly = (df.groupby(['Year','Month'], as_index=False).agg( P_HIGH=('High', 'max'), D_HIGH=('High', 'idxmax'), P_LOW=('Low', 'min'), D_LOW=('Low', 'idxmin') )) return wkly
调用函数
使用时直接传入你的DataFrame就能拿到正确结果:
# 替换成你的实际DataFrame result = agg_monthly(your_dataframe) print(result)
可选:更灵活的通用聚合函数
如果需要让函数适配不同的分组列和聚合规则,可以把这些做成参数:
def custom_group_agg(df, group_columns, agg_rules): return df.groupby(group_columns, as_index=False).agg(**agg_rules) # 定义聚合规则和分组列 agg_rules = { 'P_HIGH': ('High', 'max'), 'D_HIGH': ('High', 'idxmax'), 'P_LOW': ('Low', 'min'), 'D_LOW': ('Low', 'idxmin') } group_cols = ['Year','Month'] # 调用函数 result = custom_group_agg(your_dataframe, group_cols, agg_rules)
内容的提问来源于stack exchange,提问作者Yogesh Kamboj
相关产品推荐
相关产品推荐

