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

基于Pandas优化多年度各县数据占比统计代码的技术问询

问题描述

有一份包含5年数据的数据集,需要生成一个DataFrame完成以下统计:

  • 每年各County中Column 1值>10的行占比
  • 各County在当年数据集中的重要性(即行数占当年总行数的比例)
  • 最终按年度取平均值

已实现单年度(2018年)的逻辑,代码如下:

df_2018_1 = df[(df.Year=='2018')]
df_2018_2 = df[(df.column_1 > 10) & (df.Year=='2018')]
df_2018_cur = pd.DataFrame()
df_2018_cur['Column 1 > 10'] = df_2018_2.County.value_counts()/df_2018_1.County.value_counts()*100
# Percent of submissions by county out of all submissions (county importance).
df_2018_cur['PCT of State'] = df_2018_1.County.value_counts()/len(df_2018_1)*100

# Repeat for remaining years, then average across dataframes.

希望获得更简洁的代码方案,疑惑是否可借助groupby实现。

简洁解决方案

完全可以通过groupby结合聚合操作实现,无需逐年度重复代码,完整方案如下:

import pandas as pd

# 1. 新增辅助列,标记Column 1是否大于10
df['col1_gt10'] = df['column_1'] > 10

# 2. 按年度+County分组,统计每组总行数和符合条件的行数
grouped = df.groupby(['Year', 'County']).agg(
    total_rows=('col1_gt10', 'count'),
    gt10_rows=('col1_gt10', 'sum')
)

# 3. 计算两个百分比指标
grouped['Column 1 > 10'] = (grouped['gt10_rows'] / grouped['total_rows']) * 100
# 先统计每年总行数,再计算各County行数占当年总行数的比例
year_total = df.groupby('Year')['County'].count()
grouped['PCT of State'] = (grouped['total_rows'] / grouped.index.get_level_values('Year').map(year_total)) * 100

# 4. 按County取所有年度的指标平均值
result_avg = grouped.groupby('County').mean().reset_index()

# 若需要保留年度维度的原始统计结果,直接使用grouped即可;若要年度均值则用result_avg
print(result_avg)

关键逻辑说明

  • groupby(['Year', 'County']).agg(...):一次性完成跨年度的分组统计,count获取每组总行数,sum统计col1_gt10为True的行数(布尔值在求和时等价于1/0)
  • year_total:先计算每年的总行数,再通过索引映射快速计算各County的年度占比
  • groupby('County').mean():直接聚合所有年度的指标值,得到各County的平均占比,无需手动合并多个年度DataFrame

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 18:01:06