我有一个包含4列的数据集。我想获取每个time
和col1
的{{1}}列的最后一个条目,对于col3
,最后一个条目是col1 = 1
,对于2018-05-01 23:34:00
最后一个条目是col1 = 2
,查看最后一个条目与倒数第二个条目之间的差异(例如,对于2018-05-01 05:48:00
是col1 = 1
)是否大于24小时。这也是2018-04-30 01:58:00
的兴趣所在。
如果是这样,我想获取col2=2
中与倒数第二个条目相对应的值,并将col2
中与时间倒数第二个条目相对应的值更改为{{ 1}}。
这是数据的一部分:
col2
我想要的输出是:
null
如何过滤col2中的值,并使其与上面给出的最初的4列相同?
答案 0 :(得分:1)
这可能有帮助..
>>> df
time col1 col2 col3
0 2018-04-29 02:12:00 1 50 3
1 2018-04-30 01:58:00 1 40 3
2 2018-05-01 23:34:00 1 11 3
3 2018-05-01 05:48:00 2 10 4
4 2018-04-29 02:02:00 2 25 4
我们可以得到每个col1
分组的最后一次出现,如下所示。
>>> df.groupby(['col1'], as_index=False).last()
col1 time col2 col3
0 1 2018-05-01 23:34:00 11 3
1 2 2018-05-01 05:48:00 25 4
现在,我们可以将其存储为last_diff
的变量,以便以后进行比较。
>>> last_diff = df.groupby(['col1'], as_index=False).last()
现在,我们可以使用pd.DateOffset
计算24小时以上的时间差,以根据比较结果获得布尔表达式,然后返回True
或False
..
>>> last_diff['time_diff'] = (last_diff['time'] + pd.DateOffset(days=0)).dt.hour > 24
>>> last_diff
col1 time col2 col3 time_diff
0 1 2018-05-01 23:34:00 11 3 False
1 2 2018-05-01 05:48:00 25 4 False