Pandas groupby如何根据分组键是否在指定列表使用不同聚合方法
可以通过groupby.apply一步实现,实现逻辑是利用单字段分组下每个分组对象的name属性获取当前分组的ID值,判断是否属于指定列表后执行对应的聚合逻辑即可。
完整可运行代码如下:
import pandas as pd # 构造测试数据 df = pd.DataFrame({'ID' : [1, 1, 1, 2, 2, 2, 2, 3, 3, 3], 'Data' : [5, 7, 6, 13, 14, 11, 10, 2, 4, 3]}) some_list = [2, 3] # 自定义聚合函数 def custom_agg(group_df): # group_df.name 即为当前分组对应的ID值 if group_df.name in some_list: return group_df['Data'].sum() / 4 else: return group_df['Data'].mean() # 一步执行分组聚合 result = df.groupby('ID').apply(custom_agg).reset_index(name='Data') print(result)
运行后输出结果和需求完全一致:
ID Data 0 1 6.00 1 2 12.00 2 3 2.25
如果偏好更简洁的写法,也可以直接用lambda表达式代替自定义函数:
result = df.groupby('ID').apply( lambda x: x['Data'].sum()/4 if x.name in some_list else x['Data'].mean() ).reset_index(name='Data')
内容的提问来源于stack exchange,提问作者Emi OB
相关产品推荐
相关产品推荐

