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

Pandas按时间戳差筛选1秒内同价格行失效问题求助

我明白你遇到的问题了——在旧版本的pandas(0.22.0)里,有些新版本的语法可能不兼容,导致之前的方法失效。咱们一步步来解决这个需求:

适配pandas 0.22.0的解决方案

1. 先把时间戳转成可计算的datetime类型

首先得确保你的timestamp列是pandas的datetime格式,不然没法正确计算时间差:

import pandas as pd

# 假设你的DataFrame名为df
df['timestamp'] = pd.to_datetime(df['timestamp'])

2. 计算相邻行的时间差与价格匹配条件

用shift()方法获取下一行的时间戳和价格,然后计算两行的时间差(转成秒),同时判断价格是否相同:

# 获取下一行的时间戳和价格
next_timestamp = df['timestamp'].shift(-1)
next_price = df['price'].shift(-1)

# 计算时间差的总秒数,同时排除最后一行(因为它没有下一行)
time_diff_seconds = (next_timestamp - df['timestamp']).dt.total_seconds()

# 构建筛选条件:时间差≤1秒、价格与下一行相同
match_mask = (time_diff_seconds <= 1) & (time_diff_seconds > 0) & (df['price'] == next_price)

3. 筛选出所有符合条件的行

这里要注意:符合要求的行包括当前满足条件的行和对应的下一行,所以我们需要把这两类索引合并后筛选:

# 获取当前满足条件的行的索引
current_match_indices = df[match_mask].index
# 对应的下一行索引就是当前索引+1
next_match_indices = current_match_indices + 1
# 合并所有需要保留的索引,并排序
all_match_indices = current_match_indices.union(next_match_indices)
# 得到最终结果
result_df = df.loc[all_match_indices].sort_index()

针对你提供的示例数据测试

假设你的示例中第6行的时间戳实际是2018-04-29 13:17:08.999(和第5行差0.668秒),那么运行后会选中第5、6两行——这两行满足时间差在1秒内且价格相同。

为什么旧版本可能失效?

有些新版本的写法(比如直接用df.diff()处理时间列后取dt.seconds)在pandas 0.22里可能有问题,因为dt.seconds只会返回时间差的秒部分,不会计算分钟/小时的差值,而dt.total_seconds()是正确计算总秒数的方法,在0.22版本中是支持的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:49:03