如何在Python中每年逐月绘制日期值的直方图?

时间:2016-07-06 16:25:34

标签: python pandas dataframe

我写了这段代码来绘制每个月的日期值的直方图。它显示整个数据集中每个月的日期数。但是我希望每年的每个月都有直方图。也就是说,例如,我应该在1年到1月到1月,然后在1年到1月到12月等等。

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

pd.options.display.mpl_style = 'default'

sns.set_context("talk")

df = pd.read_csv("data.csv", names=['lender','loan','country','sector','amount','date'],header=None)
date=df['date']
df.date = date.astype("datetime64")
df.groupby(df.date.dt.month).count().plot(kind="bar")

1 个答案:

答案 0 :(得分:1)

根据文档字符串the groupby docstringby参数为:

  

列名列表。调用对象索引的每个元素以确定组。如果通过了dict或Series,则系列或dict VALUES将用于确定组

所以你的代码就变成了:

df = pd.read_csv(...)
df['date'] = df['date'].astype("datetime64")
df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
df.groupby(by=['month', 'year']).count().plot(kind="bar")

但我会把它写成:

ax = (
    pandas.read_csv(...)
        .assign(date=lambda df: df['date'].astype("datetime64"))
        .assign(year=lambda df: df['date'].dt.year)
        .assign(month=lambda df: df['date'].dt.month)
        .groupby(by=['year', 'month'])
        .count()
        .plot(kind="bar")
)

现在您有了一个matplotlib轴对象,可用于修改刻度标签(例如matplotlib x-axis ticks dates formatting and locations