【问题标题】:Pandas resample and boxplot (seaborn)Pandas 重新采样和箱线图(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

谢谢

【问题讨论】:

    标签: python pandas seaborn boxplot


    【解决方案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 插入另一列,否则我会丢失每日分组。无论如何,它解决了我的问题。
    猜你喜欢
    • 2020-08-03
    • 2016-06-11
    • 2018-02-16
    • 1970-01-01
    • 2014-02-24
    • 1970-01-01
    • 2013-10-27
    • 2016-06-12
    • 1970-01-01
    相关资源
    最近更新 更多