Pandas DataFrame按Name分组求和Damage同时保留其余列的实现问题
Pandas按指定规则分组聚合实现方案
核心逻辑
通过groupby.agg()为不同字段配置专属聚合规则,一次操作即可完成所有字段处理并保留全部原有列。
代码实现
第一步:定义Job字段自定义聚合函数
# Job字段聚合规则:优先返回组内非0值,组内无非0值时返回0 def handle_job(series): non_zero_values = series[series != 0] return non_zero_values.iloc[0] if non_zero_values.shape[0] > 0 else 0
第二步:执行分组聚合
import pandas as pd # 此处df替换为你自己的DataFrame对象 result_df = df.groupby(by="Name", as_index=False).agg( Damage=("Damage", "sum"), Ally=("Ally", "first"), # 字段固定为T,取组内第一个值即可 EncId=("EncId", "first"), # 全表值相同,取组内第一个值即可 Duration=("Duration", "max"), # 取组内最大值 Job=("Job", handle_job) # 其他需要保留的列可在此处补充对应聚合规则,固定值类均可用first )
补充说明
如果Job字段组内存在多个非0值,你可以根据实际需求调整handle_job函数的返回逻辑,比如要返回最大非0值可修改为return non_zero_values.max()即可。
内容的提问来源于stack exchange,提问作者user9225274
相关产品推荐
相关产品推荐

