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

Python优化Pandas双DataFrame匹配for循环 实现百万级数据快速处理

性能问题原因

你现有代码的性能瓶颈来自两个方面:

  • 逐行循环遍历dfA,每次循环都要对dfB做全表扫描匹配firstname,整体时间复杂度是O(len(dfA)*len(dfB)),数据量达到百万级时耗时会指数级上升
  • pandas的逐行loc赋值本身效率极低,远不如向量化运算性能好

最优优化方案:使用map映射

先把dfB转换为firstname到gender的映射字典,再直接对dfA的firstname列做向量化映射,缺失值直接填充为unknown即可,代码如下:

# 先对dfB按firstname去重,避免同一个名字对应多个性别导致映射异常
name_gender_map = dfB.drop_duplicates('firstname').set_index('firstname')['gender'].to_dict()
# 批量映射生成genderNew列,匹配不到的填充为unknown
dfA['genderNew'] = dfA['firstname'].map(name_gender_map).fillna('unknown')

这个方案的时间复杂度只有O(len(dfA)+len(dfB)),百万级数据通常几秒内就能跑完,性能是原循环写法的上千倍。

备选方案:使用merge左连接

如果你后续还需要关联dfB的其他字段,可以用左连接实现相同效果:

# 先对dfB按firstname去重,避免关联后行数膨胀
dfB_unique = dfB.drop_duplicates('firstname')[['firstname', 'gender']]
# 左连接关联两个表
dfA = dfA.merge(dfB_unique, on='firstname', how='left', suffixes=('', '_New'))
# 填充匹配不到的缺失值
dfA['gender_New'] = dfA['gender_New'].fillna('unknown')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:36:04