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

如何在Pandas中筛选B列相同且时间间隔1小时内的行

Pandas筛选满足B列相同且时间间隔1小时内的行

需求

现有以datetime为索引的Pandas DataFrame,需筛选出同时满足以下条件的行:

  • B列值完全相同
  • 同B值的行之间时间间隔不超过1小时

示例说明

  • s_1的两行时间间隔1小时45分钟,不符合条件,排除
  • s_2中Ford和GMC对应的两行间隔30分钟,符合要求,保留输出
  • s_2中Kia对应的行与最近的s_2行(GMC)间隔超过1小时,排除
  • 若存在多组符合时间窗口的行,所有相关行均需输出

解决方案代码

import pandas as pd

def main():
    df = pd.DataFrame({'dttm_utc': pd.date_range('1/1/2012', periods=10, freq=pd.offsets.Minute(n=15))})
    df['A'] = [2365, 6721, 9835, 7651, 2398, 4555, 9881, 9080, 2010, 1999]
    df['B'] = ['s_1', 's_2', 's_3', 's_2', 's_4', 's_5', 's_6', 's_1', 's_7', 's_2']
    df['C'] = ['BMW', 'Ford', 'Toyota', 'GMC', 'Hyundai', 'Chevy', 'BMW', 'Honda', 'Tesla', 'Kia']
    df.set_index('dttm_utc', inplace=True)
    print(f'Initial DF:\n{df}')

    # 定义分组筛选逻辑:检查组内每行是否与前后行时间间隔≤1小时
    def filter_group(group):
        # 计算当前行与上一行的时间差
        prev_diff = group.index.to_series().diff()
        # 计算当前行与下一行的时间差
        next_diff = group.index.to_series().diff().shift(-1)
        # 标记满足条件的行
        mask = (prev_diff <= pd.Timedelta(hours=1)) | (next_diff <= pd.Timedelta(hours=1))
        return group[mask]

    # 先筛选出B列有重复的行,再按B分组处理
    dup_df = df[df.duplicated('B', keep=False)]
    result = dup_df.groupby('B', group_keys=False).apply(filter_group)
    # 去除可能的重复行
    result = result.drop_duplicates()

    print(f'\nResult DF:\n{result}')

if __name__ == "__main__":
    main()

运行输出

Initial DF:
                        A    B        C
dttm_utc                               
2012-01-01 00:00:00  2365  s_1      BMW
2012-01-01 00:15:00  6721  s_2     Ford
2012-01-01 00:30:00  9835  s_3   Toyota
2012-01-01 00:45:00  7651  s_2      GMC
2012-01-01 01:00:00  2398  s_4  Hyundai
2012-01-01 01:15:00  4555  s_5    Chevy
2012-01-01 01:30:00  9881  s_6      BMW
2012-01-01 01:45:00  9080  s_1    Honda
2012-01-01 02:00:00  2010  s_7    Tesla
2012-01-01 02:15:00  1999  s_2      Kia

Result DF:
                        A    B      C
dttm_utc                              
2012-01-01 00:15:00  6721  s_2   Ford
2012-01-01 00:45:00  7651  s_2    GMC

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 22:03:24