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

如何遍历两个Pandas DataFrame并基于指定列条件筛选df_2数据

Pandas 高效关联实现方案

核心逻辑优化:需求可等价转换为「对同一个wag值,只要df2该行的msr_date小于等于df1中该wag的最大date,就符合保留条件」。因为只要存在任意一个df1的date满足>=msr_date,该wag的最大date必然也满足该条件,无需逐行比对所有date,可大幅降低计算复杂度。

具体实现代码如下:

  1. 先统一将日期字段转为datetime类型,避免字符串比较出错
import pandas as pd

# 转换日期格式
df_1['date'] = pd.to_datetime(df_1['date'])
df_2['msr_date'] = pd.to_datetime(df_2['msr_date'])
  1. 统计df1中每个wag对应的最大date
# 按wag分组取最大date
df1_wag_max_date = df_1.groupby('wag', as_index=False)['date'].max().rename(columns={'date': 'max_date'})
  1. 关联df2与统计结果,过滤符合条件的行
# 内连接仅保留df1中存在的wag对应的df2行
merged_df = df_2.merge(df1_wag_max_date, on='wag', how='inner')
# 过滤满足日期条件的行,删除辅助列
df_new = merged_df[merged_df['msr_date'] <= merged_df['max_date']].drop(columns='max_date').reset_index(drop=True)

性能说明

全程使用Pandas矢量化运算,底层由C实现,比Python层的for循环效率高10~100倍,适合千万级以上的数据量。同时避免了多对多关联产生的笛卡尔积膨胀,仅做一次分组聚合和一次等值连接,时间复杂度可控。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:15:05