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

Python Pandas:为df1新增列获取符合条件的df2最小时间戳

解决方法:为df1新增匹配条件的最小timestamp2列

嘿,我来帮你搞定这个需求!要在df1里新增一列,取df2中满足col03=0且timestamp2大于当前行timestamp1的最小timestamp2,我们可以用两种高效的方式实现,下面详细说明:

方法一:用merge_asof(推荐,大数据集更高效)

merge_asof是pandas专门用于按最近键匹配的工具,属于矢量化操作,比循环快得多,适合处理大规模数据。步骤如下:

  1. 先筛选并排序df2中符合条件的行

    import pandas as pd
    
    # 原始数据
    d1 = {'timestamp1': [88148 , 5617900, 5622548, 5645748, 6603950, 6666502], 'col01': [1, 2, 3, 4, 5, 6]}
    df1 = pd.DataFrame(d1)
    d2 = {'timestamp2': [5629500, 5643050, 6578800, 6583150, 6611350], 'col02': [7, 8, 9, 10, 11], 'col03': [0, 1, 0, 0, 1]}
    df2 = pd.DataFrame(d2)
    
    # 筛选df2中col03为0的记录,并按timestamp2排序(merge_asof要求右表排序)
    filtered_df2 = df2[df2['col03'] == 0].sort_values('timestamp2')
    
  2. 对df1排序后执行匹配

    # merge_asof要求左表也按匹配键排序
    df1_sorted = df1.sort_values('timestamp1')
    
    # 执行前向匹配:找大于当前timestamp1的最小timestamp2
    result_df = pd.merge_asof(
        df1_sorted,
        filtered_df2[['timestamp2']],  # 只保留需要的列
        left_on='timestamp1',
        right_on='timestamp2',
        direction='forward'  # forward表示取第一个大于等于左键的右键值
    )
    
    # 恢复df1原来的顺序(如果需要),并重命名新列
    result_df = result_df.sort_index().rename(columns={'timestamp2': 'min_valid_timestamp2'})
    

执行后,result_df里的min_valid_timestamp2列就是你要的结果。如果某行timestamp1没有对应的符合条件的timestamp2,该列会显示NaN,你可以用fillna()按需填充。

方法二:用bisect+apply(小数据集友好,代码直观)

如果你的数据量不大,也可以用Python的bisect模块结合apply实现,逻辑更直观:

import bisect

# 提取并排序符合条件的timestamp2列表
valid_timestamps = sorted(df2[df2['col03'] == 0]['timestamp2'].tolist())

# 定义函数:找到大于当前t的最小timestamp2
def get_min_valid_t(t):
    # bisect_right找到第一个大于t的元素索引
    idx = bisect.bisect_right(valid_timestamps, t)
    # 如果索引在列表范围内,返回对应值,否则返回None
    return valid_timestamps[idx] if idx < len(valid_timestamps) else None

# 应用到df1
df1['min_valid_timestamp2'] = df1['timestamp1'].apply(get_min_valid_t)

验证结果

以df1中timestamp1=5622548的行为例,filtered_df2的timestamp2有5629500、6578800、6583150,大于5622548的最小值是5629500,对应新列值就是这个,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:39:36