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

Pandas按日期统计唯一Maid(仅保留首次出现记录)及大数据量性能优化方案

高效处理百万级数据集:统计Maid首次出现日期

这个问题在处理大规模数据集时很常见——你的循环方法在小数据上没问题,但百万级行的话,Python循环和逐次isin检查的开销会让速度慢到不可接受。这里有个完全矢量化的高效方案,利用pandas的内置优化来处理:

核心思路

我们只需要保留每个Maid首次出现的记录,后续出现的直接丢弃,再基于这些首次记录做统计即可。Pandas的内置函数都是底层优化过的(C实现),比Python循环快几个数量级。

高效代码实现

import pandas as pd

# 读取数据时直接解析日期,避免后续转换(更高效)
df = pd.read_csv('/home/ubuntu/uniqueSiteId.csv', parse_dates=['date'])

# 1. 按日期排序,确保每个Maid的第一行是首次出现的记录
df_sorted = df.sort_values('date')

# 2. 保留每个Maid的首次出现记录,自动丢弃后续重复的Maid行
first_occurrences = df_sorted.drop_duplicates(subset='maid', keep='first')[['maid', 'date']]

# 如果需要按日期统计当日新增的Maid数量:
daily_new_maid_count = first_occurrences.groupby('date').size().reset_index(name='count')

# 输出你需要的首次出现记录
print(first_occurrences)
# 输出每日新增统计
print(daily_new_maid_count)

为什么这个方法更快?

  • 矢量化操作:sort_values和drop_duplicates都是pandas底层优化的矢量化操作,避免了Python级别的循环,处理百万级数据只需要几秒。
  • 时间复杂度优化:排序的时间复杂度是O(n log n),而你的原方法是O(n*d)(d是日期的数量),当n是百万级时,后者的开销会急剧上升。

验证结果

用你提供的示例数据测试,first_occurrences会输出和你预期完全一致的结果:

maiddate
4104010f8-5f57-4f7c-8ad9-5fc3ec0f9f392021-08-11
20589b8a3-9d33-4db4-b94a-834cc8f461062021-08-13
511947b4a-ccf8-48dc-a6a3-925836b3c5202021-08-13
0023f1f5f-37fb-4869-a957-b66b111d808e2021-08-14

而daily_new_maid_count会给出按日期统计的新增Maid数量:

datecount
2021-08-111
2021-08-132
2021-08-141

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 12:19:05