Python Pandas - Группировать по, затем строить по категориям - PullRequest
0 голосов
/ 26 апреля 2020

Очень просто pandas вопрос, я новичок.

У меня есть фрейм данных 'df' с (например):

import pandas as pd
df = pd.DataFrame({'time': ['2019-04-23 10:21:00', '2019-04-23 11:14:00', '2019-04-24 11:30'], 
                   'category': ['A', 'B', 'A'],
                   'text': ['njrnfrjn','fmrjfmrfmr','mjrnfjrnmi']})

Я просто хочу:

  • Группировка по категориям и датам (ежедневно)
  • Подсчет количества текстовых сообщений по категориям и дням
  • Построение всех временных рядов по дням (один временной ряд для каждой категории в тот же сюжет)

Спасибо

1 Ответ

1 голос
/ 26 апреля 2020

Вы можете попробовать следующее:

df.groupby([df.time.dt.floor('d'), "category"]).size().unstack().plot()

Пояснения :

  • Первый шаг к grouby , как вы упомянули. Для этого мы используем groupby
  • В groupby, поскольку нам нужно сгруппировать times по дням, одним из решений является использование dt.floor в столбце time. Мы передаем аргумент "d" для days.

    • Кроме того, чтобы быть уверенным, что floor достижимо, столбец time должен быть time series. Если это не так, используйте pd.to_datetime, чтобы преобразовать его в pd.to_datetime(df.time).
  • Теперь у нас есть группа, размер может быть легко вычислено с использованием метода size.

  • Следующим шагом является преобразование столбца category (на этом этапе в качестве индекса) в столбцы. Поскольку мы groupby двумя клавишами, мы можем использовать unstack.

  • Наконец, вызовите plot один кадр данных. Поскольку структура данных хорошо структурирована, она работает без каких-либо аргументов (для каждого столбца рисуется одна строка, а столбец индекса (time) используется как ось x .

...