我写了这段代码来绘制每个月的日期值的直方图。它显示整个数据集中每个月的日期数。但是我希望每年的每个月都有直方图。也就是说,例如,我应该在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")
答案 0 :(得分:1)
根据文档字符串the groupby
docstring,by
参数为:
列名列表。调用对象索引的每个元素以确定组。如果通过了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)