假设我有以下数据框:
df
A B C D event
Timestamp
1991-04-21 09:09:00 9.0 13.0 NaN NaN 100.0
1991-04-21 17:08:00 7.0 NaN NaN NaN 119.0
1991-04-21 22:51:00 NaN NaN 123.0 NaN NaN
1991-04-22 07:35:00 10.0 13.0 NaN NaN 216.0
1991-04-22 13:40:00 2.0 NaN NaN NaN NaN
1991-04-22 16:56:00 7.0 NaN NaN NaN 211.0
使用代码
df['delta_time'] = (df['event']-df['event'].shift()).fillna(0)
我得到了
Timestamp A B C D event delta_time
1991-04-21 09:09:00 9.0 13.0 NaN NaN 100.0 00:00:00
1991-04-21 17:08:00 7.0 NaN NaN NaN 119.0 07:59:00
1991-04-21 22:51:00 NaN NaN 123.0 NaN NaN 05:43:00
1991-04-22 07:35:00 10.0 13.0 NaN NaN 216.0 08:44:00
1991-04-22 13:40:00 2.0 NaN NaN NaN NaN 06:05:00
1991-04-22 16:56:00 7.0 NaN NaN NaN 211.0 03:16:00
1991-04-23 07:25:00 11.0 13.0 NaN NaN 257.0 14:29:00
但我正在寻找的是
Timestamp
1991-04-21 09:09:00 9.0 13.0 NaN NaN 100.0 00:00:00
1991-04-21 17:08:00 7.0 NaN NaN NaN 119.0 07:59:00
1991-04-21 22:51:00 NaN NaN 123.0 NaN NaN NaN
1991-04-22 07:35:00 10.0 13.0 NaN NaN 216.0 13:42:00
1991-04-22 13:40:00 2.0 NaN NaN NaN NaN NaN
1991-04-22 16:56:00 7.0 NaN NaN NaN 211.0 09:21:00
1991-04-23 07:25:00 11.0 13.0 NaN NaN 257.0 14:29:00
我想计算每次事件发生时经过的时间,并省略事件为NaN的时间。那么编写该代码的正确方法是什么。
答案 0 :(得分:2)
我假设这是你想要的,我不知道Timestamp
是否是索引,但如果它不是索引,这将有效:
In [251]:
df['delta_time'] = df.loc[df['event'].notnull(),'Timestamp'].diff()
df
Out[251]:
Timestamp A B C D event delta_time
0 1991-04-21 09:09:00 9.0 13.0 NaN NaN 100.0 NaT
1 1991-04-21 17:08:00 7.0 NaN NaN NaN 119.0 07:59:00
2 1991-04-21 22:51:00 NaN NaN 123.0 NaN NaN NaT
3 1991-04-22 07:35:00 10.0 13.0 NaN NaN 216.0 14:27:00
4 1991-04-22 13:40:00 2.0 NaN NaN NaN NaN NaT
5 1991-04-22 16:56:00 7.0 NaN NaN NaN 211.0 09:21:00
如果需要,您需要调用reset_index
将索引恢复为列
基本上你根据'事件的位置来屏蔽感兴趣的行。不为空,然后调用diff
以获得行间差异