You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为棒球运动员数据新增年代列并绘制Seaborn箱线图

给棒球运动员数据添加年代分组并绘制箱线图的解决方案

嘿,这个需求我熟!给棒球数据按十年分组加标签再画箱线图,其实两步就能搞定,我给你一步步说清楚~

第一步:新增年代分组列

首先假设你的DataFrame里存储年份的列名叫year(如果不是,记得替换成你实际的列名)。我们用矢量化运算来快速生成年代标签,比循环或者apply高效得多,尤其适合你这种时间跨度大的数据集。

代码示例:

import pandas as pd

# 假设你的DataFrame名为df,年份列是'year'
# 计算每个年份所属的十年起始年
df['decade'] = ((df['year'] - 1) // 10) * 10 + 1
# 把起始年转成"XXXX-XXXX"的字符串格式,方便后续绘图
df['decade_label'] = df['decade'].apply(lambda x: f"{x}-{x+9}")

举个例子:1871减去1是1870,除以10取整得187,乘以10加1就是1871,对应标签1871-1880;1880的话,1880-1=1879,//10还是187,所以也归到1871-1880,完美匹配你要的分组规则。

如果年份列有缺失值,可以先处理:比如用df = df.dropna(subset=['year'])删除缺失年份的行,或者根据实际情况填充。

第二步:绘制箱线图

接下来用Seaborn来画箱线图,它对分组数据的可视化非常友好。如果没装Seaborn,先执行pip install seaborn安装。

代码示例:

import seaborn as sns
import matplotlib.pyplot as plt

# 设置清爽的绘图风格
sns.set_style("whitegrid")

# 绘制箱线图,x是年代标签,y替换成你要分析的平均数据列(比如'avg_hits')
plt.figure(figsize=(12, 6))
sns.boxplot(x='decade_label', y='avg_hits', data=df)

# 添加标题和轴标签
plt.title('棒球运动员年度平均数据按年代分布箱线图', fontsize=14)
plt.xlabel('年代', fontsize=12)
plt.ylabel('平均数据', fontsize=12)

# 旋转x轴标签,避免重叠
plt.xticks(rotation=45)

plt.show()

要是想用Matplotlib原生绘制,也可以这样写:

import matplotlib.pyplot as plt

plt.figure(figsize=(12, 6))
df.boxplot(column='avg_hits', by='decade_label', figsize=(12, 6))
plt.title('棒球运动员年度平均数据按年代分布箱线图')
plt.suptitle('')  # 去掉Matplotlib自动生成的冗余标题
plt.xlabel('年代')
plt.ylabel('平均数据')
plt.xticks(rotation=45)
plt.show()

额外小提示

  • 如果绘图时x轴年代顺序乱了,可以把decade_label转成有序分类:
# 获取所有唯一年代标签并排序
sorted_decades = sorted(df['decade_label'].unique())
df['decade_label'] = pd.Categorical(df['decade_label'], categories=sorted_decades, ordered=True)

这样x轴就会严格按时间顺序排列,不会出现混乱。

  • 如果需要按多维度分组(比如同时按年代和球员位置),可以用sns.boxplot(x='decade_label', y='avg_hits', hue='position', data=df)添加分组颜色区分。

内容的提问来源于stack exchange,提问作者Eddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:47:35