如何高效统计DataFrame df1中各用户在df2中的出现次数?
嗨,针对你处理几十万行DataFrame的需求,我有几个高效的方案推荐——都是用pandas的内置优化操作,绝对比逐行循环快得多:
高效统计用户出现次数的方案
因为你的数据量很大(数十万行),千万别用逐行循环,那会慢到让人崩溃。推荐用下面这些基于向量化的方法:
方案一:先统计频次再合并
这是最直接高效的思路,分两步走:
- 先把df2里所有用户的出现次数统计出来
- 和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
相关产品推荐
相关产品推荐

