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

如何使用pandas将同ID的两行数据横向合并为单行格式

pandas按ID分组横向拼接行数据实现方案

核心逻辑是按ID分组后,将组内2条数据拆分为两个子集,再横向合并,按需调整列名和顺序即可。

实现代码

import pandas as pd

# 1. 加载/构造原始数据
df = pd.DataFrame({
    'ID': [1, 1, 2, 2],
    'Name': ['X', 'Y', 'A', 'y'],
    'm1': [2, 1, 2, 5],
    'm2': [6, 2, 4, 6],
    'm3': [6, 3, 7, 7]
})

# 2. 拆分同ID下的两组数据
# 取每组第一行数据,Name列加后缀1
df_group1 = df.groupby('ID', as_index=False).nth(0)
df_group1 = df_group1.rename(columns={'Name': 'Name1'})
# 取每组第二行数据,所有字段加后缀2,保留ID列用于关联
df_group2 = df.groupby('ID', as_index=False).nth(1).add_suffix('2').rename(columns={'ID2': 'ID'})

# 3. 按ID横向拼接两组数据
result = pd.merge(df_group1, df_group2, on='ID')

# 4. 调整列顺序匹配目标格式
result = result[['ID', 'Name1', 'm1', 'm2', 'm3', 'Name2', 'm12', 'm22', 'm32']]

# 若要严格匹配示例里无后缀的重复列名(不推荐,会导致后续列索引歧义),可追加重命名操作
# result.columns = ['ID', 'Name1', 'm1', 'm2', 'm3', 'Name2', 'm1', 'm2', 'm3']

输出结果

执行代码后得到的result和需求逻辑完全匹配(你给出的示例中ID=2对应的第二行m1值写为6属于笔误,原始数据中该值为5,代码输出为正确值):

IDName1m1m2m3Name2m12m22m32
1X266Y123
2A247y567

适配提示:如果单个ID对应超过2行数据,可以在分组后通过循环给每组数据加不同序号,再用pivot方法做行转列即可通用适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:48:24