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

Pandas按区域分组统计0/1鸟类数据并绘制分组柱状图

实现步骤

你之前groupby聚合结果异常,大概率是两个原因:一是没有指定仅对4个鸟类列做聚合,把area/year这类非统计字段纳入了计算;二是如果你的1/0是字符串格式,直接求和会触发字符串拼接,得到无意义的结果。
按以下步骤实现即可:

  • 第一步:导入依赖、定义鸟类列名,统一把鸟类列转为数值类型(如果列本身已经是整数格式可跳过转换步骤)
import pandas as pd
import matplotlib.pyplot as plt

# 定义需要统计的鸟类列
bird_columns = ['swallow', 'sparrow', 'kite', 'finch']
# 把字符串格式的'0'/'1'转为整数0/1
df[bird_columns] = df[bird_columns].astype(int)
  • 第二步:按district分组,对鸟类列求和得到每个区域各类鸟的观测总次数(取值为1代表出现,求和结果就是总出现次数)
district_bird_count = df.groupby('district')[bird_columns].sum()

用你提供的样例数据,运行后得到的统计结果如下,完全符合预期:

districtswallowsparrowkitefinch
aaa4324
bbb1121
  • 第三步:绘制柱状图
    1. 单区域单独出图(每个区一个独立柱状图)
# 根据区域数量自动调整子图布局,这里按1行排列
fig, axes = plt.subplots(nrows=1, ncols=len(district_bird_count), figsize=(12, 4))
for ax, (district_name, count_res) in zip(axes, district_bird_count.iterrows()):
    count_res.plot(kind='bar', ax=ax, title=f'区域{district_name}鸟类出现次数')
    ax.set_ylabel('总观测次数')
    ax.set_xlabel('鸟类种类')
plt.tight_layout()
plt.show()
  1. 所有区域合并到同一张柱状图做对比
district_bird_count.plot(
    kind='bar',
    figsize=(8, 5),
    xlabel='区域',
    ylabel='总观测次数',
    title='各区域鸟类出现次数统计'
)
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:15:52