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

如何高效统计DataFrame df1中各用户在df2中的出现次数?

嗨,针对你处理几十万行DataFrame的需求,我有几个高效的方案推荐——都是用pandas的内置优化操作,绝对比逐行循环快得多:

高效统计用户出现次数的方案

因为你的数据量很大(数十万行),千万别用逐行循环,那会慢到让人崩溃。推荐用下面这些基于向量化的方法:

方案一:先统计频次再合并

这是最直接高效的思路,分两步走:

  1. 先把df2里所有用户的出现次数统计出来
  2. 和df1做左连接,确保只保留df1的用户,没在df2出现的用户次数填0

示例代码:

import pandas as pd

# 假设你的用户列名叫'user',记得换成你实际的列名
# 第一步:统计df2的用户频次
df2_user_counts = df2['user'].value_counts().reset_index()
df2_user_counts.columns = ['user', 'appear_count']  # 重命名列方便后续合并

# 第二步:和df1左连接,缺失的次数填充为0
final_result = df1.merge(df2_user_counts, on='user', how='left').fillna(0)
final_result['appear_count'] = final_result['appear_count'].astype(int)  # 转成整数类型

方案二:用字典映射快速添加次数

如果只需要给df1新增一列显示次数,这个方法更简洁:

# 把df2的频次统计转成字典:键是用户,值是出现次数
user_count_map = df2['user'].value_counts().to_dict()

# 给df1新增列,用map匹配,不存在的用户返回0
df1['appear_count'] = df1['user'].map(user_count_map).fillna(0).astype(int)

为什么这些方法高效?

  • 它们都用了pandas的向量化操作,底层是C实现的,比Python循环快几十甚至上百倍
  • value_counts是pandas专门优化的频次统计函数,处理几十万行数据毫无压力
  • 合并或映射都是批量处理,完全避免了逐行遍历的开销

如果你的用户列名不是'user',把代码里的列名替换成你实际用的就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:17:30