如何对长格式pandas DataFrame按键分组后条件选择对应列值?
实现方案
核心逻辑
按Name字段分组后,对每个分组的Position列做自定义聚合:
- 先对当前人员的所有位置记录去重
- 若去重后的结果同时包含
Forward和Offence,直接返回Both Forward and Offence - 若仅存在单一类型的位置记录,直接返回该类型即可
完整可运行代码
import pandas as pd # 构造测试数据集 data = {'Name': ['Tom', 'Tom', 'Aiden', 'Aiden', 'Aiden', 'Kristy', 'Kristy'], 'Position': ['Forward', 'Offence', 'Forward', 'Offence', 'Both Forward and Offence', 'Forward', 'Forward']} df = pd.DataFrame(data) # 自定义聚合函数 def calc_final_position(pos_list): unique_pos = set(pos_list) if 'Forward' in unique_pos and 'Offence' in unique_pos: return 'Both Forward and Offence' return next(iter(unique_pos)) # 分组聚合得到结果 result_df = df.groupby('Name', as_index=False)['Position'].agg(calc_final_position) print(result_df)
运行后输出结果和要求的理想输出完全一致。
可检索技术关键词
- pandas 自定义聚合函数
- pandas groupby 条件判断
- pandas 长表按分组聚合去重
内容的提问来源于stack exchange,提问作者Ivy McKee
相关产品推荐
相关产品推荐

