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

两个DataFrame间多索引匹配优化:替代嵌套for循环的高效方案

高效实现多列匹配填充DataFrame的方法

核心思路

用pandas内置的透视表+合并操作替代嵌套循环,这两个操作都是底层优化的矢量化运算,处理百万级数据的效率远高于Python层面的循环逻辑。

具体步骤

1. 将查找表转换为宽格式

先把df_1从长格式(单条记录对应一个step的work_time)转成宽格式(每个匹配组合对应A、B、C三列的工时):

# 透视df_1,将step转为列名,work_time作为对应列的值
pivoted_df1 = df_1.pivot_table(
    index=['store', 'department', 'task', 'employee', 'month_year_date'],
    columns='step',
    values='work_time',
    aggfunc='first'  # 若同一匹配组合+step有重复值,可按需替换聚合函数,比如'sum'/'mean'
).reset_index()

# 确保列名与df_2的A、B、C完全对应(若df_1的step值本身就是'A'/'B'/'C',此步可省略)
pivoted_df1.columns = ['store', 'department', 'task', 'employee', 'month_year_date', 'A', 'B', 'C']

2. 匹配填充目标表

将转换后的宽表与df_2通过指定列合并,自动完成A、B、C列的填充:

# 左合并保留df_2的所有行,匹配不到的记录会填充NaN
df_2 = df_2.merge(
    pivoted_df1,
    on=['store', 'department', 'task', 'employee', 'month_year_date'],
    how='left'
)

额外优化建议

  • 确保匹配列(store、department等)在df_1和df_2中的数据类型完全一致(比如都是字符串或整数),避免类型不匹配导致的合并效率低下或错误。
  • 如果df_1存在大量重复的匹配组合+step记录,先去重再透视能进一步提升效率:
df_1_clean = df_1.drop_duplicates(subset=['store', 'department', 'task', 'employee', 'month_year_date', 'step'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 14:35:59