如何遍历两个Pandas DataFrame并基于指定列条件筛选df_2数据
Pandas 高效关联实现方案
核心逻辑优化:需求可等价转换为「对同一个wag值,只要df2该行的msr_date小于等于df1中该wag的最大date,就符合保留条件」。因为只要存在任意一个df1的date满足>=msr_date,该wag的最大date必然也满足该条件,无需逐行比对所有date,可大幅降低计算复杂度。
具体实现代码如下:
- 先统一将日期字段转为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'])
- 统计df1中每个wag对应的最大date
# 按wag分组取最大date df1_wag_max_date = df_1.groupby('wag', as_index=False)['date'].max().rename(columns={'date': 'max_date'})
- 关联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
相关产品推荐
相关产品推荐

