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

如何基于另一DataFrame的时间区间过滤目标DataFrame数据?

解决DataFrame区间筛选结果被覆盖的问题

你的问题出在循环赋值逻辑上:每次循环都直接用data = df1.loc[...]覆盖之前的结果,前面区间筛选出的数据会被后续循环的结果覆盖,所以最后只保留了最后一次循环(id=32)的筛选结果。

解决方案1:用列表收集所有区间结果,最后合并

修改循环逻辑,把每个区间的筛选结果存入列表,最后合并成完整的DataFrame:

import pandas as pd

# 初始化空列表存储每个区间的筛选结果
result_list = []

for i in range(len(df2)):
    t1 = df2.loc[i, 'DatetimeStart']
    t2 = df2.loc[i, 'DatetimeEnd']
    # 筛选当前时间区间内的df1数据
    filtered_data = df1.loc[(df1['datetimeUTC'] >= t1) & (df1['datetimeUTC'] <= t2)]
    # 可选:将df2对应的meanKGH字段关联到筛选结果中
    filtered_data['meanKGH'] = df2.loc[i, 'meanKGH']
    # 将结果添加到列表
    result_list.append(filtered_data)

# 合并所有区间的结果为一个DataFrame
final_data = pd.concat(result_list, ignore_index=True)

解决方案2:用apply简化逻辑(推荐)

避免手动遍历索引,用apply遍历df2的每一行,自动筛选并收集结果:

import pandas as pd

def filter_by_interval(row):
    # 生成当前行时间区间的筛选掩码
    mask = (df1['datetimeUTC'] >= row['DatetimeStart']) & (df1['datetimeUTC'] <= row['DatetimeEnd'])
    # 筛选数据并关联meanKGH字段
    temp_df = df1[mask].copy()
    temp_df['meanKGH'] = row['meanKGH']
    return temp_df

# 遍历df2每一行执行筛选,合并所有结果
final_data = pd.concat(df2.apply(filter_by_interval, axis=1).tolist(), ignore_index=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 19:55:17