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])
现在我想制作一个显示每天分布的箱线图。通常,我会使用 resample
或 groupby
,但我无法将这些组反馈到 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)的主要内容,如果未能解决你的问题,请参考以下文章
将分割图(点图)添加到分组箱线图 - Pandas 和 Seaborn
同一图上 Pandas 数据框多列的箱线图(seaborn)