如何在 Pandas DataFrame 中按月对行进行分组?

blo*_*ley 4 python boxplot dataframe pandas

我需要创建一些定时数据的箱线图,其中一个方框代表每个月的原始数据。像这样的东西:

在此处输入图片说明

现在让我们尝试使用 Pandas 创建它:

matplotlib inline
import numpy as np
import pandas as pd

N_DAYS = 100
dates = pd.date_range('20130101', periods=N_DAYS)
df = pd.DataFrame(np.random.randn(N_DAYS,1), index=dates)
Run Code Online (Sandbox Code Playgroud)

我可以按月(代码M)重新采样并应用聚合函数,例如median

df.resample('M').median()
Run Code Online (Sandbox Code Playgroud)

但是,我无法创建数据的箱线图:

df.resample('M').boxplot();
Run Code Online (Sandbox Code Playgroud)

这将创建一个代表每个月均值分布的框。

在此处输入图片说明

另外,我收到以下警告:

FutureWarning: 
.resample() is now a deferred operation
You called boxplot(...) on this deferred object which materialized it into a dataframe
by implicitly taking the mean.  Use .resample(...).mean() instead
Run Code Online (Sandbox Code Playgroud)

如何为每个月创建原始数据的箱线图?

jez*_*ael 5

似乎您需要period首先使用by关键字参数为分层箱线图创建新列来创建分组:

df['per'] = df.index.to_period('M')
df.boxplot(by='per')
Run Code Online (Sandbox Code Playgroud)

图形

您还可以查看文档