Pandas如何按ID分组合并多行diff值为|分隔串并新增diff-merged列
pandas按ID分组拼接diff列实现方法
核心思路是按id字段分组后,将数值型的diff列转为字符串,再用|作为分隔符拼接,最终生成指定名称的新列。
完整实现代码
import pandas as pd # 构造示例数据集 df = pd.DataFrame({ 'id': ['abc123', 'DEF567', 'HIK445', 'abc123', 'abc123'], 'diff': [718.0, 679.0, 1567.04, 766.6, 2307.88] }) # 分组拼接逻辑 df_result = df.groupby('id', as_index=False)['diff'].apply( lambda group: '|'.join(group.astype(str)) ).reset_index(name='diff-merged')
输出结果
执行后df_result的内容如下,每个ID对应唯一一行,拼接后的值存在diff-merged列:
id diff-merged 0 DEF567 679.0 1 HIK445 1567.04 2 abc123 718.0|766.6|2307.88
注意事项
- 因为原始
diff列是浮点数值类型,必须先通过astype(str)转为字符串才能做字符串拼接,否则会触发类型错误 as_index=False参数用于避免将id字段设置为结果表的行索引,保持普通数据列的格式- 如果需要统一拼接后数值的显示格式(比如固定保留2位小数、去掉数值末尾无意义的
.0),可以修改lambda内的转换逻辑,例如lambda group: '|'.join(f'{val:.2f}' for val in group)即可统一保留两位小数后拼接。
内容的提问来源于stack exchange,提问作者Tony
相关产品推荐
相关产品推荐

