如何使用Pandas的crosstab计算均值并绘制带图例的并列柱状图
解决方案
pd.crosstab 默认统计分组频数,要计算指定列的均值,只需传入values指定待聚合的score列,再用aggfunc指定聚合规则为均值即可,无需依赖groupby,具体实现分两种场景:
场景1:仅按lunch分组,输出N、Y对应的score均值柱
import pandas as pd import matplotlib.pyplot as plt df = pd.read_csv("my file path") # 生成crosstab计算分组均值 cross_tab = pd.crosstab( index=df["lunch"], columns="平均得分", values=df["score"], aggfunc="mean" ) # 绘图,自动带图例 cross_tab.plot(kind="bar", figsize=(7, 2)) plt.ylabel("平均得分") plt.show()
场景2:双维度分组生成交叉表,输出并列柱(如按setting+lunch分组)
符合你提到的「基于两列生成交叉表、并列柱状图」需求,每个setting对应lunch=N、lunch=Y两个并列柱:
import pandas as pd import matplotlib.pyplot as plt df = pd.read_csv("my file path") cross_tab = pd.crosstab( index=df["setting"], # 行对应X轴的setting维度 columns=df["lunch"], # 列对应分组维度,每个取值生成一个并列柱 values=df["score"], # 指定要聚合的得分列 aggfunc="mean" # 聚合规则为求均值 ) cross_tab.plot(kind="bar", figsize=(8, 3)) plt.ylabel("平均得分") plt.show()
参数说明
index:交叉表的行,对应柱状图X轴的分类维度columns:交叉表的列,对应柱状图的分组维度,每个不同取值生成一个独立柱子values:指定要做聚合计算的字段,这里对应score列aggfunc:聚合函数,填mean即为求均值,也可替换为sum/max等其他聚合规则
内容的提问来源于stack exchange,提问作者xtryingx
相关产品推荐
相关产品推荐

