如何将DataFrame数据按昼夜拆分后绘制seaborn分组箱线图
解决方案
首先新增昼夜标识列是最优方案,逻辑清晰易读,后续复用、调整统计规则或绘图参数时都不需要重复计算,比临时生成变量的方案可维护性高很多。
具体实现步骤
- 第一步:先确保索引为datetime类型,根据时间提取小时判断昼夜
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # 确认date索引为datetime格式 df.index = pd.to_datetime(df.index) # 生成昼夜标识列:06:00-18:00为白昼,其余时段为夜间 df['period'] = df.index.hour.map(lambda x: '白昼' if 6 <= x <= 18 else '夜间')
- 第二步:将原宽表转换为seaborn绘图所需的长表格式,适配分组箱线图的数据要求
# 转换长表:保留period列,把Bob、Ann列转为姓名维度,对应数值转为数值维度 df_long = df.melt(id_vars='period', value_vars=['Bob', 'Ann'], var_name='姓名', value_name='数值')
- 第三步:调用seaborn的boxplot方法,直接传入period作为hue参数即可绘制分组箱线图
sns.boxplot(data=df_long, x='姓名', y='数值', hue='period') plt.show()
补充说明
如果不想修改原DataFrame,也可以在转换长表时临时计算昼夜标识,但该方案后续调整昼夜划分规则时需要调整多处逻辑,灵活度远低于新增列的方案,一般不推荐。
内容的提问来源于stack exchange,提问作者lcsmmn
相关产品推荐
相关产品推荐

