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

pandas如何实现相同时间戳下首条记录值减末条记录值

错误原因

你的代码存在两个核心问题:

  • 两个drop_duplicates生成的DataFrame保留的是原始数据的行索引,直接做减法时pandas会按行索引对位计算,不会自动按Time字段匹配,计算逻辑完全不成立。
  • 没有指定计算列,Time列是datetime类型,两个时间值相减会得到0 days格式的时间差,和你要的数值计算结果无关。
修正代码

最简洁高效的写法是直接按Time分组计算,完全不需要绕去重逻辑:

import pandas as pd

df = pd.read_csv(DF, usecols=['Time', 'OpenIA'])
df['Time'] = pd.to_datetime(df['Time'])
# 若不需要对时间做秒级向上取整,可删除下一行
df['Time'] = df['Time'].dt.ceil("S")

# 分组后取每组第一个OpenIA减最后一个OpenIA
result = df.groupby('Time', as_index=False)['OpenIA'].agg(
    lambda col: col.iloc[0] - col.iloc[-1]
)

运行后result输出完全匹配预期:

TimeOpenIA
2022-07-15 10:00:230
2022-07-15 10:01:112
2022-07-15 10:01:33-1

如果你非要沿用去重的思路,需要先把Time设为索引,保证两个去重结果按时间值对齐,且只计算OpenIA列:

df = df.set_index('Time')
first_val = df.drop_duplicates(keep='first')['OpenIA']
last_val = df.drop_duplicates(keep='last')['OpenIA']
result = (first_val - last_val).reset_index()

该写法结果和groupby方案一致,但执行效率和可读性都更差,优先推荐第一种分组写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:15:39