Конвертировать pd.Grouper в удобочитаемый формат на plt.plot - PullRequest
1 голос
/ 15 мая 2019

Я использую Pandas и Matplotlib для вывода некоторых данных из базы данных SQL.

Вот мои шаги:

  • извлечение данных из БД в pd.DataFrame
  • сгруппируйте их, используя Grouper ('MS')
  • в совокупности подсчитать, сколько предметов в каждой группе
  • Нарисуйте график
df = df.groupby(Grouper(key='published_at', freq='MS'))['id'].count()
ax = df.plot.bar(position=0.5, width=0.4, label="Items")

Вот как выглядит мой сюжет:

enter image description here

Я бы хотел показать месяцы как «2019-04», так что «Y-M», но я не могу понять, как это сделать.

Поскольку я абсолютно новичок в Python, любая помощь будет принята с благодарностью. Спасибо!

Ответы [ 2 ]

1 голос
/ 15 мая 2019

Следующие примеры работают с вашими примерами данных, но могут потерпеть неудачу с большим количеством дат:

tmp_df = df.resample('MS',on='published_at').id.count()
plt.figure(figsize=(10,6))
plt.bar(tmp_df.index.strftime("%Y-%m"), tmp_df)
plt.show()

Выход:

enter image description here

0 голосов
/ 15 мая 2019

Кажется, вы просто хотите переформатировать столбец datetime.

Также похоже, что вы уже преобразовали этот столбец в правильный формат, если не начинаете со строки 2, в противном случае начинайте со строки 5.

# Convert to datetime
df['published_at'] = pd.to_datetime(df['published_at'])

# You can start from here, if you have already converted your column
df['published_at_YM'] = df['DOB'].dt.strftime('%Y-%m')

df = df.groupby(Grouper(key='published_at_YM', freq='MS'))['id'].count()

ax = df.plot.bar(position=0.5, width=0.4, label="Items")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...