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

如何基于条件筛选并剔除重复行?Pandas百万级AMS卡号数据集去重优化问询

优化Pandas百万级数据去重与聚合的高效方案

兄弟,你用Python循环遍历每个AMS卡号的方式,在百万级数据下肯定慢得离谱!Pandas的强项就是批量矢量操作,Python层面的for循环完全没利用到它的底层优化,而且你还反复切片数据框、用append(这个操作每次都要复制整个数据,巨耗内存),不慢才怪。

给你两套高效的实现方案,都是用Pandas内置的分组聚合功能,速度能提升几十甚至上百倍:

方案一:分组聚合+关联筛选

先一次性计算每个AMS卡号对应的目标日期,再和原数据匹配筛选:

import pandas as pd

# 先确保日期列是datetime类型(如果还没转的话)
df['Customer Reg Date'] = pd.to_datetime(df['Customer Reg Date'])
df['Customer First Purchase Date'] = pd.to_datetime(df['Customer First Purchase Date'])

# 按AMS卡号分组,计算每个卡号的最新注册日期、最早首次购买日期
aggregated = df.groupby('AMS Card').agg(
    latest_reg=('Customer Reg Date', 'max'),
    earliest_pur=('Customer First Purchase Date', 'min')
).reset_index()

# 关联原数据,筛选出符合条件的行,最后去重确保卡号唯一
dffinal = df.merge(aggregated, on='AMS Card')
dffinal = dffinal[
    (dffinal['Customer Reg Date'] == dffinal['latest_reg']) &
    (dffinal['Customer First Purchase Date'] == dffinal['earliest_pur'])
].drop(columns=['latest_reg', 'earliest_pur']).drop_duplicates(subset='AMS Card')

方案二:transform原地添加聚合列(更简洁)

用transform直接在原数据上添加分组后的聚合结果,再筛选:

import pandas as pd

# 先转日期类型
df['Customer Reg Date'] = pd.to_datetime(df['Customer Reg Date'])
df['Customer First Purchase Date'] = pd.to_datetime(df['Customer First Purchase Date'])

# 给每行添加对应卡号的最大注册日期、最小购买日期
df['latest_reg'] = df.groupby('AMS Card')['Customer Reg Date'].transform('max')
df['earliest_pur'] = df.groupby('AMS Card')['Customer First Purchase Date'].transform('min')

# 筛选符合条件的行,清理临时列后去重
dffinal = df[
    (df['Customer Reg Date'] == df['latest_reg']) &
    (df['Customer First Purchase Date'] == df['earliest_pur'])
].drop(columns=['latest_reg', 'earliest_pur']).drop_duplicates(subset='AMS Card')

为什么这两种方法快?

  • groupby是Pandas底层用C实现的批量操作,比Python循环效率高N个量级,百万级数据秒级就能处理完
  • 避免了反复创建小数据框和append的内存开销,所有操作都是基于原数据的批量处理
  • 最后用drop_duplicates(subset='AMS Card')兜底,确保同一卡号只留一条记录(如果有多个行同时满足日期条件的话)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 16:24:08