提问人:Budspencer 提问时间:11/13/2023 最后编辑:Budspencer 更新时间:11/15/2023 访问量:64
季度箱形图与月份之和 [复制]
quarterly box plots with the sum of the months [duplicate]
问:
这个问题在这里已经有答案了:
为 Pandas 数据透视表中的每个值列定义 Aggfunc (3 个答案)
大熊猫从宽到长(3 个答案)
按两列分组以获得另一列的总和(2 个答案)
按一列分组和另一列的内容求和 (1 个答案)
10天前关闭。
我想绘制季度箱线图,但每个季度的 3 个月的总和。我能够绘制每个季度的 3 个月平均值的箱线图。我报告代码:
import os
import numpy as np
import pandas as pd
import datetime as dt
import seaborn as sns
import matplotlib.pyplot as plt
df_air = pd.read_csv('https://raw.githubusercontent.com/AileenNielsen/TimeSeriesAnalysisWithPython/master/data/AirPassengers.csv',
parse_dates=['Month'], date_parser=lambda x: pd.to_datetime(x, format='%Y-%m', errors = 'coerce'))
df_air.reset_index(inplace=True)
# data preparation
df_air['year'] = [d.year for d in df_air.Month]
df_air['month'] = [d.strftime('%b') for d in df_air.Month]
df_air['quarter'] = [d.quarter for d in df_air.Month]
years = df_air['year'].unique()
# plot drawing
fig, axes = plt.subplots(3, 1, figsize=(20,20), dpi= 150)
sns.boxplot(x='year', y='#Passengers', data=df_air, ax=axes[0])
sns.boxplot(x='month', y='#Passengers', data=df_air.loc[~df_air.year.isin([1949, 1961]), :], ax=axes[1])
sns.boxplot(x='quarter', y='#Passengers', data=df_air, ax=axes[2])
# set title
axes[0].set_title('year-wise Box Plot\n( Trend)', fontsize=18);
axes[1].set_title('month-wise Box Plot\n( Seasonality)', fontsize=18)
axes[2].set_title('Quarter (average)', fontsize=18)
plt.show()
季度箱线图绘制在平均值(轴 [2])上。我也想在总和上绘制季度箱线图。 换句话说,例如,1949 年第一季度是 112、118 和 132,因此总共(总)362 人(乘客),而 1960 年第一季度是 1,227 人(乘客)。我想要每个季度的箱形图。 我该怎么办?在此处输入图像描述
答: 暂无答案
评论
monthly_sum_quarter = df_air.pivot_table(index='quarter', columns='month', values='#Passengers', aggfunc='sum').melt(ignore_index=False).reset_index()
然后编码和绘图sns.boxplot(data=monthly_sum_quarter, x='quarter', y='value')
.groupby
monthly_sum_quarter = df_air.groupby(['quarter', 'month'], as_index=False)['#Passengers'].sum()
sns.boxplot(data=monthly_sum_quarter, x='quarter', y='value')