Groupby значения каждые 15 минут в панд - PullRequest
1 голос
/ 29 марта 2019

Я пытаюсь сгруппировать значения в pandas df в нерабочее время.В частности, я должен возвращать значения каждые 15 минут.Я могу сделать это, используя следующее.Но я надеюсь вернуть значения для каждого 15-минутного сегмента, даже если значения не отображаются в df.Для этих сегментов я собирался создать ffill(), где предыдущее значение будет выделено этому сегменту.

import pandas as pd

d = ({
    'Time' : ['0/1/1900 8:00:00','0/1/1900 9:59:00','0/1/1900 10:00:00','0/1/1900 12:29:00','0/1/1900 12:30:00','0/1/1900 13:00:00','0/1/1900 13:02:00','0/1/1900 13:15:00','0/1/1900 13:20:00','0/1/1900 18:10:00','0/1/1900 18:15:00','0/1/1900 18:20:00','0/1/1900 18:25:00','0/1/1900 18:45:00','0/1/1900 18:50:00','0/1/1900 19:05:00','0/1/1900 19:07:00','0/1/1900 21:57:00','0/1/1900 22:00:00','0/1/1900 22:30:00','0/1/1900 22:35:00','1/1/1900 3:00:00','1/1/1900 3:05:00','1/1/1900 3:20:00','1/1/1900 3:25:00'],                 
    'People' : [1,1,2,2,3,3,2,2,3,3,4,4,3,3,2,2,3,3,4,4,3,3,2,2,1],                      
     })

df = pd.DataFrame(data = d)

df['Time'] = ['/'.join([str(int(x.split('/')[0])+1)] + x.split('/')[1:]) for x in df['Time']]
df['Time'] = pd.to_datetime(df['Time'], format='%d/%m/%Y %H:%M:%S') 

df = df.groupby(df.Time.dt.floor('15T'))['People'].max()
print(df)

Time
1900-01-01 08:00:00    1
1900-01-01 09:45:00    1
1900-01-01 10:00:00    2
1900-01-01 12:15:00    2
1900-01-01 12:30:00    3
1900-01-01 13:00:00    3
1900-01-01 13:15:00    3
1900-01-01 18:00:00    3
1900-01-01 18:15:00    4
1900-01-01 18:45:00    3
1900-01-01 19:00:00    3
1900-01-01 21:45:00    3
1900-01-01 22:00:00    4
1900-01-01 22:30:00    4
1900-01-02 03:00:00    3
1900-01-02 03:15:00    2

В этой серии представлены только группы, присутствующие в df.Можно ли определить значения для каждого 15-минутного сегмента путем прямого заполнения из предыдущей группы.Можно ли изменить следующую функцию, чтобы присвоить значения этим сегментам?

df = df.groupby(df.Time.dt.floor('H'))['People'].max()

Ответы [ 2 ]

2 голосов
/ 29 марта 2019

Если вы хотите groupby вам нужно Grouper

df.groupby(pd.Grouper(freq='15T',key='Time'))['People'].max().ffill()
2 голосов
/ 29 марта 2019

Вы можете пересчитать результат с частотой 15 минут и заполнить пробелы вперед:

df.set_index('Time').resample('15T').max().ffill().astype(int)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...