Pandas 重新采样和箱线图(seaborn)

Posted

技术标签:

【中文标题】Pandas 重新采样和箱线图(seaborn)【英文标题】:Pandas resample and boxplot (seaborn) 【发布时间】:2021-06-14 19:50:27 【问题描述】:

我有一个 pandas DataFrame,其中包含每隔几分钟记录一次的值。

import pandas as pd
import numpy as np
df = pd.DataFrame()
df['Time'] = pd.date_range("2018-01-01", periods=1000, freq="5Min")
df['Value'] = np.random.randint(1, 6, df.shape[0])

现在我想制作一个显示每天分布的箱线图。通常,我会使用 resamplegroupby,但我无法将这些组反馈到 seaborn 以进行箱线图或执行一些其他统计。

现在我使用一种非常丑陋的形式将组返回到 DataFrame 并将其翻转以将日期作为列:

daily = df.groupby(pd.Grouper(key='Time', freq='1D'))
df_days = daily['Value'].apply(lambda df: df.reset_index(drop=True)).unstack().transpose()

df_days 可以输入 seaborn.boxplot 以生成晶须图。

有没有更简单的方法来获取 DataFrame df_days

谢谢

【问题讨论】:

【参考方案1】:

由于您的数据已经是长格式,seaborn 是正确的选择。您可以使用dt.normalize()dt.date 来获取日期:

sns.boxplot(y=df['Value'], x=df['Time'].dt.date)

输出:

【讨论】:

这解决了情节问题。谢谢。但是您是否也知道获取 df_days 数据帧的技巧?有时我也想对这些数据做一些数学运算。 阅读this guide 中的 Q/A 10 pivot with two columns 不错的指南。 Q/A 10 几乎可以解决问题。但是我必须再次使用dt.date 插入另一列,否则我会丢失每日分组。无论如何,它解决了我的问题。

以上是关于Pandas 重新采样和箱线图(seaborn)的主要内容,如果未能解决你的问题,请参考以下文章

Seaborn 和 Pandas,分组箱线图

将分割图(点图)添加到分组箱线图 - Pandas 和 Seaborn

同一图上 Pandas 数据框多列的箱线图(seaborn)

基于 DataFrame 列名的颜色 seaborn 箱线图

在seaborn中绘制多个箱线图?

用直方图和箱线图理解数据