Присвойте последнее значение в пределах 1-минутных интервалов строкам панд DataFrame - PullRequest
2 голосов
/ 14 октября 2019

У меня есть такой DataFrame

    time                    val

    2019-10-01 04:00:00.000 568830.000
    2019-10-01 17:47:29.794 37612.000
    2019-10-01 19:41:03.697 37.000
    2019-10-01 19:41:03.698 37612.000
    2019-10-02 00:16:07.224 376.000
    2019-10-02 00:16:07.225 37612.000
    2019-10-02 01:19:05.135 3761.000
    2019-10-02 01:19:05.136 37612.000
    2019-10-02 08:26:27.623 36612.000
    2019-10-02 08:26:27.624 36493.000
    2019-10-03 07:08:54.455 364.000
    2019-10-03 07:08:54.456 36493.000

Я хочу создать новый столбец, содержащий значение last с интервалами в X минут, например, 1 минута столбца val.

Ожидаемый результат:

    time                    val        result

    2019-10-01 04:00:00.000 568830.000 568830.000
    2019-10-01 17:47:29.794 37612.000  37612.000
    2019-10-01 19:41:03.697 37.000     37612.000
    2019-10-01 19:41:03.698 37612.000  37612.000
    2019-10-02 00:16:07.224 376.000    37612.000
    2019-10-02 00:16:07.225 37612.000  37612.000
    2019-10-02 01:19:05.135 3761.000   37612.000
    2019-10-02 01:19:05.136 37612.000  37612.000
    2019-10-02 08:26:27.623 36612.000  36493.000 
    2019-10-02 08:26:27.624 36493.000  36493.000
    2019-10-03 07:08:54.455 364.000    36493.000
    2019-10-03 07:08:54.456 36493.000  36493.000

Ответы [ 2 ]

2 голосов
/ 14 октября 2019

Используется для DatetimeIndex DataFrame.resample с Resampler.transform и last:

df['result'] = df.resample('T')['val'].transform('last')
print (df)
                              val    result
time                                       
2019-10-01 04:00:00.000  568830.0  568830.0
2019-10-01 17:47:29.794   37612.0   37612.0
2019-10-01 19:41:03.697      37.0   37612.0
2019-10-01 19:41:03.698   37612.0   37612.0
2019-10-02 00:16:07.224     376.0   37612.0
2019-10-02 00:16:07.225   37612.0   37612.0
2019-10-02 01:19:05.135    3761.0   37612.0
2019-10-02 01:19:05.136   37612.0   37612.0
2019-10-02 08:26:27.623   36612.0   36493.0
2019-10-02 08:26:27.624   36493.0   36493.0
2019-10-03 07:08:54.455     364.0   36493.0
2019-10-03 07:08:54.456   36493.0   36493.0

И для столбца time добавить параметр on:

df['result'] = df.resample('T', on='time')['val'].transform('last')
print (df)
                      time       val    result
0  2019-10-01 04:00:00.000  568830.0  568830.0
1  2019-10-01 17:47:29.794   37612.0   37612.0
2  2019-10-01 19:41:03.697      37.0   37612.0
3  2019-10-01 19:41:03.698   37612.0   37612.0
4  2019-10-02 00:16:07.224     376.0   37612.0
5  2019-10-02 00:16:07.225   37612.0   37612.0
6  2019-10-02 01:19:05.135    3761.0   37612.0
7  2019-10-02 01:19:05.136   37612.0   37612.0
8  2019-10-02 08:26:27.623   36612.0   36493.0
9  2019-10-02 08:26:27.624   36493.0   36493.0
10 2019-10-03 07:08:54.455     364.0   36493.0
11 2019-10-03 07:08:54.456   36493.0   36493.0
0 голосов
/ 14 октября 2019

Предполагается, что ваш столбец времени имеет тип string. Вы можете использовать следующую строку, которая будет выполнять группу следующим образом.

df.groupby(df.time.map(lambda t: pd.to_datetime(t).minute)).val.last()

Но чтобы затем создать новый столбец, содержащий эти значения, вы можете использовать transform, который будет выглядеть следующим образом:

df['result'] = df.groupby(df.time.map(lambda t: pd.to_datetime(t).minute)).val.transform('last')

Обратите внимание , что я предполагаю, что вы хотите сгруппировать по минутной части метки времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...