Python中如何实现接收聚合函数作为参数的DataFrame分组聚合函数?
Python中如何实现接收聚合函数作为参数的DataFrame分组聚合函数?
嗨,我懂你的问题啦!你写的代码里踩了个很常见的Python小坑——你直接用.func()来调用传入的聚合函数,但Python根本认不出这个是你传进来的参数函数,它会把func当成DataFrameGroupBy对象的内置方法,而这个方法其实不存在,所以才会报错。
咱们来修正一下,正确的做法是用pandas分组后的agg()方法(或者apply(),不过agg()更适配聚合场景),把你传入的聚合函数直接传给它就行。这里给你写出符合你最初函数签名的正确版本:
import pandas as pd def group_and_aggregate_data(df: pd.DataFrame, group_by_column: str, agg_func) -> pd.DataFrame: # 用agg()方法传入聚合函数,内置函数、自定义函数都能生效 grouped_df = df.groupby(group_by_column).agg(agg_func) return grouped_df
举个实际使用的例子帮你理解:
假设我们有这样的测试数据:
test_data = { 'city': ['Beijing', 'Shanghai', 'Beijing', 'Shanghai', 'Guangzhou'], 'sales': [1000, 1500, 1200, 1800, 900], 'customers': [50, 75, 60, 90, 45] } df = pd.DataFrame(test_data)
我们可以这样调用函数:
- 传入pandas内置的聚合函数名(字符串形式):
# 计算各城市的销售和客户数的平均值 mean_result = group_and_aggregate_data(df, 'city', 'mean') print(mean_result)
- 传入自定义的聚合函数:
# 自定义一个计算最大值减最小值的函数 def calculate_range(x): return x.max() - x.min() range_result = group_and_aggregate_data(df, 'city', calculate_range) print(range_result)
这样就能完美实现你想要的「按城市分组,然后应用指定聚合函数」的需求啦!
备注:内容来源于stack exchange,提问作者Karina Meriina
相关产品推荐
相关产品推荐

