Pandas分组聚合时能否在agg中对单列同时实现求和、除法、舍入多步操作
实现方案
可以直接将除法、舍入逻辑合并到agg语句中一次性完成,无需后续逐行处理列,以下是两种适用场景的实现方式:
单/少量列自定义处理
直接在agg方法中为对应列指定包含计算逻辑的聚合函数即可:
import pandas as pd df1 = pd.DataFrame([['a',1,100],['b',2,300],['c',3,400]],columns = ['col1','col2','col3']) # 合并所有逻辑后的聚合语句 summary_df = df1.groupby('col1').agg( col2 = ('col2', 'sum'), col3 = ('col3', lambda x: round(x.sum() / 1000, 2)) ).reset_index()
多列批量同规则处理
如果有多个列都需要执行「求和后除以1000保留2位小数」的操作,可通过字典批量生成聚合规则,避免重复编码:
# 按处理规则对列分组,可根据实际需求增减列名 sum_raw_cols = ['col2'] # 仅需求和的列 sum_process_cols = ['col3'] # 需求和后做除法、舍入的列 # 批量生成聚合配置 agg_config = {} for col in sum_raw_cols: agg_config[col] = 'sum' for col in sum_process_cols: # 加col=col避免lambda闭包迟绑定问题 agg_config[col] = lambda x, col=col: round(x.sum() / 1000, 2) # 执行聚合 summary_df = df1.groupby('col1').agg(agg_config).reset_index()
提示:如果不同列的除法系数、保留位数不同,可以把规则存为字典,循环时读取对应参数即可适配更多场景。
内容的提问来源于stack exchange,提问作者Karanam Krishna
相关产品推荐
相关产品推荐

