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

如何将DataFrame中除Name列外相同的相邻两行合并为一行

相邻重复行(除Name列外)的合并方案

原始数据构造

先构造示例DataFrame方便测试:

import pandas as pd

df = pd.DataFrame({
    'Name': ['ab', '123', 'de', '456', 'fg', '789'],
    'info.1': ['a', 'a', 'c', 'c', 'd', 'd'],
    'info.2': [1, 1, 4, 4, 5, 5]
})

解决方案

方法一:按info列分组聚合(适配非严格相邻但info列相同的情况)

通过groupby按info.1和info.2分组,将每组的Name值提取为列表,再拆分为Name和ID列:

# 分组聚合获取每组的Name列表
grouped = df.groupby(['info.1', 'info.2'])['Name'].agg(list).reset_index()
# 将Name列表拆分为两列
grouped[['Name', 'ID']] = pd.DataFrame(grouped['Name'].tolist(), index=grouped.index)
# 调整列顺序并清理冗余列
result = grouped[['Name', 'ID', 'info.1', 'info.2']]

方法二:按索引步长提取(适配严格相邻成对的情况)

利用索引切片直接取偶数行作为Name行,奇数行作为ID行,效率更高:

# 提取偶数行(原始数据的第1、3、5行)作为基础数据
name_df = df.iloc[::2].reset_index(drop=True)
# 提取奇数行的Name列作为ID列
id_series = df.iloc[1::2]['Name'].reset_index(drop=True)
# 合并两部分数据
result = pd.concat([name_df, id_series.rename('ID')], axis=1)

最终结果

执行上述任意方法后,result的输出为:

Name   ID info.1  info.2
0   ab  123      a       1
1   de  456      c       4
2   fg  789      d       5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 09:54:22