Панды создают идентификатор группы на основе 5 5 минут - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть кадр данных, как показано ниже:

s = pd.DataFrame({
    'X':np.arange(2, 10),
    'time':pd.to_datetime([
        '20130101 7:34:04', '20130101 8:34:08', '20130101 10:34:08',
        '20130101 12:34:15', '20130101 13:34:28', '20130101 12:34:54',
        '20130101 14:34:55', '20130101 17:29:12'])
})

Я хочу создать идентификатор группы для столбца time на почасовом или любом другом временном интервале.Давайте в качестве примера будем использовать почасовую основу, вот что я хочу (начиная с полуночи 00:00:00):

X                time  time-group
0  2 2013-01-01 07:34:04           7
1  3 2013-01-01 08:34:08           8
2  4 2013-01-01 10:34:08          10
3  5 2013-01-01 12:34:15          12
4  6 2013-01-01 13:34:28          13
5  7 2013-01-01 12:34:54          12
6  8 2013-01-01 14:34:55          14
7  9 2013-01-01 17:29:12          17

Как это сделать эффективно?

PS Я знаю, что в данном конкретном случае я могу просто использовать s.time.dt.hour как time-group, но я хочу общее решение, которое могло бы работать в течение любого временного интервала.

1 Ответ

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

С большой помощью Криса мы нашли решение этой проблемы, базовая такая же, как введите описание ссылки здесь , но с небольшой модификацией, чтобы начать с нужной базы, трюкздесь нужно добавить базу (начальную точку) в качестве первого ряда data.frame Вот коды 100

s = pd.DataFrame({
    'X':np.arange(1,10),
    'time':pd.to_datetime([
        '20130101 00:00:00',
        '20130101 7:34:04', '20130101 8:34:08', '20130101 10:34:08',
        '20130101 12:34:15', '20130101 13:34:28', '20130101 12:34:54',
        '20130101 14:34:55', '20130101 17:29:12']),
    'time-group':[1,7,8,10,12,13,12,14,17]
})
# '20130101 00:00:00' is the base I want, you can change it to whatever you want.
s.sort_values(['time'], ascending=[True],inplace=True)
new = s.groupby(pd.Grouper(key='time', freq='15T'), as_index=False).apply(lambda x: x['time'])
s['time-group'] = new.index.get_level_values(0)

, которые дадут вам:

   X                time  time-group
0  1 2013-01-01 00:00:00           0
1  2 2013-01-01 07:34:04          30
2  3 2013-01-01 08:34:08          34
3  4 2013-01-01 10:34:08          42
4  5 2013-01-01 12:34:15          50
5  6 2013-01-01 13:34:28          50
6  7 2013-01-01 12:34:54          54
7  8 2013-01-01 14:34:55          58
8  9 2013-01-01 17:29:12          69
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...