如何用Pandas计算每日同时间戳数据差值并新增列(无需新增前日列)
实现每日同一时间戳的24小时差值计算
没问题,完全可以不用新增前日数据列就能实现这个需求!我们可以利用pandas的分组(groupby)和移位(shift)功能直接完成计算,核心思路是按时间戳的「时分秒」部分分组,这样每个组里的行都是不同日期的同一时间点,接着在组内对value做移位操作,最后和当前值相减就能得到24小时差值。
具体代码实现
首先确保你的date_time列是datetime类型(如果还没转换的话):
import pandas as pd # 转换datetime列类型 df['date_time'] = pd.to_datetime(df['date_time']) # 直接计算change24h列,无需中间列 df['change24h'] = df['value'] - df.groupby(df['date_time'].dt.time)['value'].shift(1)
代码逻辑解释
df['date_time'].dt.time:提取每个时间戳的「时分秒」部分(比如00:00:00、00:05:00),以此作为分组依据,确保每个组内的行都是不同日期的同一时间点。groupby(...)['value'].shift(1):在每个时间组内,将value向下移位一行,也就是获取前一天同一时间点的数值。- 用当前
value减去移位后的值,直接得到change24h;前一天的行因为没有更早的匹配数据,会自动填充NaN,完全符合你想要的目标结果。
最终结果验证
运行代码后,你的DataFrame会呈现如下效果:
| date_time | value | change24h |
|---|---|---|
| 2016-01-10 00:00:00 | 28.4 | NaN |
| 2016-01-10 00:05:00 | 28.4 | NaN |
| 2016-01-10 00:10:00 | 28.4 | NaN |
| 2016-01-11 00:00:00 | 27.4 | -1.0 |
| 2016-01-11 00:05:00 | 29.4 | 1.0 |
| 2016-01-11 00:10:00 | 28.4 | 0.0 |
这种方法不仅省去了中间列的冗余,还能自动处理日期不连续或某天数据缺失的情况(只要同一时间点有历史数据就能计算),灵活性拉满。
内容的提问来源于stack exchange,提问作者Trần Danh Lưu
相关产品推荐
相关产品推荐

