如何基于另一列值获取一列的值

时间:2018-11-07 03:39:32

标签: python pandas list dataframe

我有一个包含4列的数据集。我想获取每个timecol1的{​​{1}}列的最后一个条目,对于col3,最后一个条目是col1 = 1,对于2018-05-01 23:34:00最后一个条目是col1 = 2,查看最后一个条目与倒数第二个条目之间的差异(例如,对于2018-05-01 05:48:00col1 = 1)是否大于24小时。这也是2018-04-30 01:58:00的兴趣所在。

如果是这样,我想获取col2=2中与倒数第二个条目相对应的值,并将col2中与时间倒数第二个条目相对应的值更改为{{ 1}}。

这是数据的一部分:

col2

我想要的输出是:

null

如何过滤col2中的值,并使其与上面给出的最初的4列相同?

1 个答案:

答案 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小时以上的时间差,以根据比较结果获得布尔表达式,然后返回TrueFalse ..

>>> 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