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

Python DataFrame多县销售收入数据的统计计算与子图可视化实现咨询

Python DataFrame多县销售收入数据的统计计算与子图可视化实现咨询

嘿,刚接触Python不用慌,我来帮你一步步解决这个问题~

首先说统计计算的部分——要算每个县的销售收入总和与均值,完全不用写for loop,用pandas的groupby分组统计是最高效的方式,一行代码就能搞定:

# 按县分组,计算Sales和Income的sum与mean
county_stats = df_staging.groupby('County Name')[['Sales', 'Income']].agg(['sum', 'mean'])
print(county_stats)

这段代码会直接生成一个新的DataFrame,每个县对应一行,列是Sales/Income分别的总和和均值,清晰明了。

接下来是可视化的部分,先帮你修正原来的for loop代码问题:你原来的循环里,i已经是每个县的名字(比如A1、A2),但你写了ind_county[i],这是错误的——因为ind_county是去重后的县名Series,i是元素值不是索引,所以直接用i匹配就行。另外,为了让子图布局更整齐,我们可以用matplotlib的subplots先创建好子图网格,再循环画图:

import matplotlib.pyplot as plt

# 获取所有唯一的县名,这里先取前2个做测试
ind_county = df_staging['County Name'].drop_duplicates().tolist()[:2]

# 创建子图网格,比如2列,行数自动计算
row_num = (len(ind_county) + 1) // 2  # 向上取整
fig, axes = plt.subplots(row_num, 2, figsize=(12, 6))
axes = axes.flatten()  # 把二维的axes数组转成一维,方便循环

for idx, county in enumerate(ind_county):
    # 筛选当前县的所有数据
    county_data = df_staging[df_staging['County Name'] == county]
    # 在对应子图上画柱状图,同时展示Sales和Income
    county_data.plot.bar(x='Year', y=['Sales', 'Income'], ax=axes[idx], title=f'{county} 年度销售与收入')
    axes[idx].tick_params(axis='x', rotation=45)  # 旋转年份标签,避免重叠

# 隐藏多余的空自图(如果县的数量是奇数的话)
for ax in axes[len(ind_county):]:
    ax.axis('off')

plt.tight_layout()  # 自动调整子图间距,避免标题和标签重叠
plt.show()

如果你不想写for loop,用seaborn的FacetGrid可以自动帮你生成分组子图,完全不用自己处理循环逻辑,特别适合这种按类别分图的场景:

import seaborn as sns
import matplotlib.pyplot as plt

# 初始化FacetGrid,按County Name分组,每行放2个子图
g = sns.FacetGrid(df_staging, col='County Name', col_wrap=2, height=4)
# 给每个子图添加Sales和Income的柱状图
g.map_dataframe(sns.barplot, x='Year', y='Sales', color='cornflowerblue', alpha=0.7, label='Sales')
g.map_dataframe(sns.barplot, x='Year', y='Income', color='orange', alpha=0.7, label='Income')
# 添加图例和标题
g.add_legend()
g.set_titles('{col_name} 县')
g.set_axis_labels('年份', '金额')
plt.tight_layout()
plt.show()

最后给你个小建议:刚学pandas的话,多熟悉groupby的用法,它是处理分组数据的核心工具,能帮你省超多重复代码;可视化方面,seaborn的高层封装函数(比如FacetGrid、relplot)能大幅减少手动循环的工作量,适合快速生成规范的分组图。

如果还有细节想调整,比如子图的大小、颜色、图例样式之类的,随时说哦~

备注:内容来源于stack exchange,提问作者Kendo96

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 11:54:37