如何基于ID列groupby合并多列多行数据并生成指定格式列表
问题解决方案
原有代码错误原因
- 选取多列的语法不符合pandas规范,选择多列需要传入
[列1, 列2, 列3]形式的列表,不能连续写多个[]做链式索引 - 原有逻辑只支持拼接单个列的所有值,无法先完成单行多列拼接、再按分组拼接多行的需求
正确实现代码
基础实现版:
import pandas as pd # 先将每行的三个字段转为字符串后拼接为单个逗号分隔字符串 df['tmp'] = df[['Sample_id', 'Sample_name', 'Sample_number']].astype(str).agg(','.join, axis=1) # 按Id分组,将同组的所有行用换行符拼接,生成Sample_details列 result = df.groupby('Id')['tmp'].agg('\n'.join).reset_index(name='Sample_details')
去空格优化版:
如果原始字段存在前后多余空格,可以用以下版本处理:
import pandas as pd # 拼接时自动去除每个字段的前后空格 df['tmp'] = df[['Sample_id', 'Sample_name', 'Sample_number']].astype(str).apply(lambda x: ','.join(i.strip() for i in x), axis=1) result = df.groupby('Id')['tmp'].agg('\n'.join).reset_index(name='Sample_details')
效果说明
生成的result数据框中,Sample_details列的同组内容会按单行多列逗号分隔、多行之间换行的格式存储,和你给出的期望输出格式完全匹配。
内容的提问来源于stack exchange,提问作者behappy
相关产品推荐
相关产品推荐

