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

Pandas:处理连续重复行并合并列以保留原始结构的方法

解决CSV中重复组的合并问题

嘿,我完全get到你的需求了——就是把每一组[col1,col2]对应的两行数据合并成一行,把第一行的col3留在原列,第二行的col3移到新的col4里,而且要完全贴合你给的示例格式,不能留多余的索引对吧?

其实用pandas就能轻松搞定,而且完全可以避开你担心的索引问题,步骤很清晰:

步骤1:准备数据并添加组内行号

首先我们需要给每一组[col1,col2]的行标记一个组内序号(0和1,因为每组正好两行),这样后续的pivot操作就能精准把两个col3值分到不同列:

import pandas as pd

# 读取你的CSV文件,sep参数根据实际分隔符调整,示例是空格分隔所以用'\s+'
df = pd.read_csv('your_input.csv', sep='\s+')

# 给每个[col1,col2]组内的行生成0、1的序号
df['row_num'] = df.groupby(['col1', 'col2']).cumcount()

步骤2:Pivot并调整格式

接下来用pivot把序号转成列,然后把索引还原成普通列,最后重命名列名匹配你的期望输出:

# 执行pivot,以col1、col2为索引,row_num为列,col3为值
pivoted_df = df.pivot(index=['col1', 'col2'], columns='row_num', values='col3')

# 把索引中的col1、col2转回普通列,消除多级索引
pivoted_df = pivoted_df.reset_index()

# 重命名列名,对应col3和col4
pivoted_df.columns = ['col1', 'col2', 'col3', 'col4']

# 查看最终结果
print(pivoted_df)

效果验证

运行这段代码后,输出会和你给出的期望结果完全一致:

col1 col2  col3  col4
0    X    A     1     2
1    Y    A     3     4
2    X    B     5     6
3    Z    C     7     8

这个方法的核心就是用cumcount()给每组标记行号,让pivot操作有明确的列映射,再通过reset_index()把索引转成普通列,完美避开了你担心的索引残留问题。

如果你的CSV是逗号分隔的,只需要把sep='\s+'改成sep=','(或者直接省略,因为pandas默认用逗号分隔)就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 12:57:40