Как получить значение одного столбца на основе значения другого столбца - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть набор данных, содержащий 4 столбца. Я хотел бы получить последнюю запись из time столбца для col1 и col3, для col1 = 1 последняя запись 2018-05-01 23:34:00 и для col1 = 2 последняя запись 2018-05-01 05:48:00 посмотреть, если разница между последними запись и вторая до последней записи (например, для col1 = 1 это 2018-04-30 01:58:00) больше 24 часов или нет. Это также интерес для col2=2.

Если это так, я хочу получить значение в col2, соответствующее последней и второй-последней записи, и изменить значение в col2, соответствующее второй-последней записи времени, на null.

Вот часть данных:

       time           col1     col2     col3
 2018-04-29 02:12:00    1       50        3
 2018-04-30 01:58:00    1       40        3
 2018-05-01 23:34:00    1       11        3
 2018-04-29 02:02:00    2       10        4
 2018-05-01 05:48:00    2       25        4

Вывод, который я хотел бы получить:

 col1     col2         col3
  1       [11, Null]     3
  2       [25, Null]     4

Как я могу отфильтровать значение в col2 и сделать его похожим на приведенный выше, учитывая 4 столбца, которые у меня были изначально?

1 Ответ

0 голосов
/ 07 ноября 2018

Это может помочь ..

>>> 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...