You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas中三列值相同时将多行合并为单行的实现问题

问题原因分析

你原来的写法存在两处核心错误:

  1. groupby的分组列需要用列表包裹传递,且分组依据应该是id、part、sub三列,不能把strength也放进分组键里——如果把strength放进去,值不同的行本来就会被分成不同组,根本达不到合并的效果。
  2. 聚合逻辑错误:不需要手动遍历取next值,直接对strength列执行字符串拼接即可,其余同值列取分组内的第一个值就行。

正确实现代码

import pandas as pd

# 示例数据
substances = pd.DataFrame({
    'id': ['id_1', 'id_1', 'id_1', 'id_2', 'id_3'],
    'part': ['1', '1', '2', '2', '3'],
    'sub': ['paracetamolum', 'paracetamolum', 'ibuprofenum', 'dienogestum', 'etynyloestradiol'],
    'strength': ['150', '50', '50', '20', '30'],
    'unit' : ['mg', 'mg', 'mg', 'mg', 'mcg'],
    'other irrelevant columns for this task' : ['sth1' , 'sth2', 'sth3', 'sth4', 'sth5']
})

# 核心实现
result = substances.groupby(['id', 'part', 'sub'], as_index=False).agg(
    strength=('strength', ' # '.join),
    unit=('unit', 'first')
    # 如需保留其他不相关列,可在此处添加对应规则,例:other_col=('other_col', 'first')
).rename(columns={'sub':'substance'}) # 按预期输出重命名sub列为substance

输出验证

执行后得到的结果与要求完全匹配:

idpartstrengthsubstanceunit
id_11150 # 50paracetamolummg
id_1250ibuprofenummg
id_2220dienogestummg
id_3330etynyloestradiolmcg

内容的提问来源于stack exchange,提问作者Paulina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 08:45:05