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

如何统计落在df_1各时间区间内的df_2数据行数

Pandas 区间匹配计数实现方案

这里提供两种常用实现方式,可根据数据量大小选择:

  • 方案1:apply 逐行判断(适合小数据量,写法直观)
    核心逻辑是遍历 df_1 每一行,统计 df_2 中time落在当前行时间区间的行数,代码示例如下:

    import pandas as pd
    
    # 构造示例数据(实际使用时替换为自己的数据源即可)
    df_1 = pd.DataFrame({
        'start_time': [0, 77, 220, 268, 391],
        'end_time': [30, 107, 250, 298, 421]
    })
    df_2 = pd.DataFrame({
        'time': [100, 392, 399]
    })
    
    # 核心计算逻辑
    df_1['count'] = df_1.apply(
        lambda row: ((df_2['time'] >= row['start_time']) & (df_2['time'] <= row['end_time'])).sum(),
        axis=1
    )
    
    # 输出结果
    print(df_1)
    
  • 方案2:向量化广播运算(适合大数据量,性能更高)
    利用numpy广播特性做批量判断,避免Python层循环开销,性能远超逐行apply,代码示例如下:

    import pandas as pd
    import numpy as np
    
    # 构造示例数据同上
    df_1 = pd.DataFrame({
        'start_time': [0, 77, 220, 268, 391],
        'end_time': [30, 107, 250, 298, 421]
    })
    df_2 = pd.DataFrame({
        'time': [100, 392, 399]
    })
    
    # 核心计算逻辑
    time_arr = df_2['time'].values
    start_arr = df_1['start_time'].values[:, None]
    end_arr = df_1['end_time'].values[:, None]
    df_1['count'] = ((time_arr >= start_arr) & (time_arr <= end_arr)).sum(axis=1)
    
    # 输出结果
    print(df_1)
    

两种方案运行后输出的df_1都和给出的预期结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:54:02