python - 从 Pandas 数据框中的前一行中减去日期时间值

标签 python dataframe group-by shift subtraction

我有一个包含两列的数据框:CategoryDatetime

我想创建一个新列来显示当前行与上一行的日期时间之间的差异,在每个类别重新开始

我有什么:

Category    Datetime
A           2018-02-01 01:51:04
A           2018-02-01 02:04:04
B           2018-02-01 02:28:34 
B           2018-02-01 02:41:34
B           2018-02-01 02:45:34    

我想要什么:

Category    Datetime               Difference
A           2018-02-01 01:51:04    NaT
A           2018-02-01 02:04:04    00:13:00
B           2018-02-01 02:28:34    NaT
B           2018-02-01 02:41:34    00:13:00
B           2018-02-01 02:45:34    00:04:00

编辑:

@sacul 我尝试了您的解决方案 df['Difference'] = list(by_group.apply(lambda x: x['Datetime']-x['Datetime'].shift())) 但它给了我奇怪的结果......这是我正在使用的实际数据:

Category    Datetime        Difference
A           2/1/18 1:51     NaT
A           2/1/18 2:04     1 days 02:52:00
B           2/1/18 2:28     NaT
C           2/1/18 2:41     NaT
D           2/1/18 6:31     0 days 00:10:30
E           2/1/18 8:26     3 days 23:19:30
F           2/1/18 10:03    0 days 00:21:00
G           2/1/18 11:11    NaT
G           2/1/18 11:11    NaT
G           2/1/18 11:11    0 days 00:00:02
G           2/1/18 11:11    0 days 00:02:30
H           2/1/18 11:12    0 days 00:00:02
H           2/1/18 11:22    0 days 00:02:28
I           2/1/18 15:26    0 days 00:00:02
I           2/1/18 16:01    0 days 00:08:26
I           2/1/18 17:26    0 days 00:00:01
J           2/1/18 17:42    0 days 00:01:31
J           2/1/18 17:42    NaT

最佳答案

替代解决方案

import pandas as pd
import numpy as np
df.DateTime = pd.to_datetime(df.DateTime)


df['Difference'] = np.where(df.Category == df.Category.shift(), df.DateTime - df.DateTime.shift(), np.nan)

注意:这仅适用于您的数据已预先排序

关于python - 从 Pandas 数据框中的前一行中减去日期时间值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48998325/

相关文章:

python - UWSGI 杀死 worker 的速度太快了

mysql - 使用mysql从表中获取下一个最后n个元素

python - Pandas:匿名 client_id 列,无法回滚

python - 如何使用存储在 git 上的 Jupyter 笔记本的 nbdiff-web 进行比较?

python - 如何使用 python 在 Facebook 上给自己发送消息?

r - 将数据帧列表转换为 R 中的单个数据帧

r - 将使用 'by' 创建的摘要转换为 data.frame

sql - T-SQL通过by子句进行分组

python - 提取仅包含 NaN 和 0 的行

python - Pandas:对于几列中的每个行值,将其转换为新行