Как использовать Pandas Groupby с периодом времени и найти среднее количество по годам за тот же период времени - PullRequest
0 голосов
/ 08 декабря 2018

Я искал повсюду, но пока не нашел хорошего способа сделать это.У меня есть датафрейм с собственными данными текстовых сообщений.В нем есть столбцы «utctime», «отправитель», «получатель» и «сообщение».То, что я хотел бы сделать, это сгруппировать это по произвольному минутному периоду времени (например, 10 или 20 минут), а затем посмотреть, в течение нескольких лет, количество сообщений, которые я отправляю за этот период времени в течение одного дня.

Первые несколько строк данных выглядят так, и это продолжается еще на 2 года:

                        utctime  sender   recipient     message
0 2016-11-25 18:00:25.877000+00:00  Person1  Me            message1
1 2016-11-25 18:50:58.694000+00:00  Person2  Me            message2
2 2016-11-25 18:54:41.871000+00:00  Me       Person2       message3
3 2016-11-25 18:54:58.583000+00:00  Person2  Me            message4
4 2016-11-25 19:01:19.694000+00:00  Me       Person2       message5

Каков наилучший способ сделать это, чтобы я мог видеть свои собственныеЧастота обмена текстовыми сообщениями с шагом в 20 минут с 00:00 до 23: 40?

Пока у меня есть еще одна функция, которая объединяет время в один день:

def time_of_day(data, tz_info):
    utctime = data.utctime.dt.tz_convert(tz_info)
    data['timeofday'] = pd.to_datetime({'year': 2017,
                                        'month': 1,
                                        'day': 1,
                                        'hour': utctime.dt.hour,
                                        'minute': utctime.dt.minute,
                                        'second': utctime.dt.second})

    return data

ЧтоЗатем я группирую с помощью пользовательского группировщика:

sf = pytz.timezone('US/Pacific')
timedelta = '10min'
grouper = pd.Grouper(key='timeofday', freq=timedelta)
data = time_of_day(data, sf) # data is returned in time of day for tz

freq = data.groupby(grouper).count()

Есть ли лучший способ сделать это?

1 Ответ

0 голосов
/ 08 декабря 2018

IIUC, вам нужно извлечь часы и минуты из 'utctime', классифицировать минуты в bins и выполнить groupby для часов и минут_бинов для count сообщений:

df['Hour'] = pd.to_datetime(df['utctime']).dt.hour
df['Minute'] = pd.to_datetime(df['utctime']).dt.minute

df['minute_bins'] = pd.cut(df['Minute'], bins=(-0.01,20,40,60), labels=('0 < 20', '20 < 40', '40 < 60'))

df.groupby(['Hour', 'minute_bins'])['message'].count()

print(df)

Hour  minute_bins
18    0 < 20         1
      40 < 60        3
19    0 < 20         1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...