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

如何在Pandas中高效还原重复行(保留原位置与处理结果)

高效实现重复行DataFrame的去重处理与还原

需求说明

处理包含大量重复行的大型Pandas DataFrame时,需要完成以下操作:

  1. 先对数据去重,仅对唯一行执行后续处理(如机器学习任务)
  2. 处理完成后将重复行还原至原位置,且所有重复行继承对应唯一行的处理结果

原实现通过Python循环追踪重复行结构,效率极低,需利用Pandas内置高效方法完成优化。

高效解决方案

核心思路是用矢量化操作替代循环,通过为每行分配唯一组标识,实现处理结果的快速映射,步骤如下:

  1. 为原DataFrame生成组标识:标记每行对应的唯一行组
  2. 提取唯一行并执行自定义处理
  3. 利用组标识将处理结果快速映射回原DataFrame结构

完整代码实现

import pandas as pd

# 初始化示例DataFrame
df = pd.DataFrame([[0, 1], [0, 0], [1, 0], [1, 1], [0, 0], [1, 1], [1, 2], [0, 0]], columns=['X', 'Y'])
print("原DataFrame:")
print(df)

# 步骤1:生成组标识 - 相同行分配相同ID
_, group_ids = pd.factorize(df.apply(tuple, axis=1))

# 步骤2:提取唯一行并执行处理
df_unique = df.drop_duplicates().reset_index(drop=True)
# 自定义处理逻辑(示例:X列+1,Y列*2)
df_unique['X'] += 1
df_unique['Y'] *= 2
print("\n处理后的唯一行:")
print(df_unique)

# 步骤3:映射处理结果回原结构
df_reinstated = df_unique.loc[group_ids].set_index(df.index)
print("\n还原后的完整DataFrame:")
print(df_reinstated)

输入输出验证

输入(原DataFrame):

X  Y
0  0  1
1  0  0
2  1  0
3  1  1
4  0  0
5  1  1
6  1  2
7  0  0

输出(还原后DataFrame):

X  Y
0  1  2
1  1  0
2  2  0
3  2  2
4  1  0
5  2  2
6  2  4
7  1  0

关键优化点

  • 用pd.factorize结合行元组编码快速生成组标识,时间复杂度远低于循环查找
  • 所有操作均为Pandas矢量化操作,彻底避免Python循环的性能瓶颈
  • 还原步骤直接通过索引映射完成,无需逐行赋值操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 08:57:35