查找第三列中给定值的两列连续行之间的时间差

Find the time difference between consecutive rows of two columns for a given value in third column

假设我们要根据变量 B 和 C 中的时间值计算下面数据框中的变量 D。

在这里,D的第二行是C2 - B1,相差4分钟 第三行 = C3 - B2 = 4 分钟,..等等。

D的第一行没有参考值所以不适用

问题:

当变量 A 中的类别值从 1 变为 2 时,我们还希望第一行的值为 NA。换句话说,值 -183 必须替换为 NA。

A   B         C         D
1   5:43:00   5:24:00   NA
1   6:19:00   5:47:00   4
1   6:53:00   6:23:00   4
1   7:29:00   6:55:00   2
1   8:03:00   7:31:00   2
1   8:43:00   8:05:00   2
2   6:07:00   5:40:00   -183
2   6:42:00   6:11:00   4
2   7:15:00   6:45:00   3
2   7:53:00   7:17:00   2
2   8:30:00   7:55:00   2
2   9:07:00   8:32:00   2
2   9:41:00   9:09:00   2
2   10:17:00  9:46:00   5
2   10:52:00  10:20:00  3

您可以使用 pandas 中日期时间列之间的差异。

df['B_dt'] = pd.to_datetime(df['B'])
df['C_dt'] = pd.to_datetime(df['C'])

使以下成为可能

>>> df['D'] = (df.groupby('A')
                .apply(lambda s: (s['C_dt'] - s['B_dt'].shift()).dt.seconds / 60)
                .reset_index(drop=True))

您以后可以随时删除这些新列。

您可以使用:

# Compute delta
df['D'] = (pd.to_timedelta(df['C']).sub(pd.to_timedelta(df['B'].shift()))
                                   .dt.total_seconds().div(60))

# Fill nan
df.loc[df['A'].ne(df['A'].shift()), 'D'] = np.nan

输出:

>>> df
    A         B         C    D
0   1   5:43:00   5:24:00  NaN
1   1   6:19:00   5:47:00  4.0
2   1   6:53:00   6:23:00  4.0
3   1   7:29:00   6:55:00  2.0
4   1   8:03:00   7:31:00  2.0
5   1   8:43:00   8:05:00  2.0
6   2   6:07:00   5:40:00  NaN
7   2   6:42:00   6:11:00  4.0
8   2   7:15:00   6:45:00  3.0
9   2   7:53:00   7:17:00  2.0
10  2   8:30:00   7:55:00  2.0
11  2   9:07:00   8:32:00  2.0
12  2   9:41:00   9:09:00  2.0
13  2  10:17:00   9:46:00  5.0
14  2  10:52:00  10:20:00  3.0