Pandas按分组生成排序后的唯一值拼接列实现方法
Pandas实现代码
你可以直接使用以下代码完成需求:
import pandas as pd data = [['Adam',12,'M','A',12,15], ['Adam',12,'M','B',13,15], ['Adam',12,'M','C',14,14], ['Mini',12,'F','A',10,14], ['Mini',12,'F','D',14,15], ['Mini',12,'F','C',13,16], ] df = pd.DataFrame(data, columns = ['Name','Age','Gender','Subject','minmark','maxmark']) # 核心实现逻辑 result = df.groupby(['Name', 'Age', 'Gender'], as_index=False)['Subject'].agg( SubjectList = lambda sub_series: ','.join(sorted(sub_series.unique())) ) # 打印输出结果 print(result)
逻辑说明
groupby指定Name、Age、Gender三个字段作为分组规则,as_index=False参数保证分组键不会转为索引,仍作为普通列保留- 对每个分组内的
Subject列做三步处理:- 调用
unique()方法对科目去重 - 调用
sorted()对去重后的科目按升序排序 - 用
','.join()把排序后的列表拼接为英文逗号分隔的字符串
- 调用
- 聚合后的新列命名为
SubjectList,最终输出的每个分组仅占一行,完全符合预期输出要求。
内容的提问来源于stack exchange,提问作者user2458922
相关产品推荐
相关产品推荐

