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

如何在Python Pandas中按年份计算Group1与Group>1的计数比值

Pandas按年度计算分组比值实现代码

实现逻辑

按Year字段分组,分别统计每组内Group=1的计数总和、Group>1的计数总和,两者做除法得到目标比值,最终输出仅包含Year和Ratio两列的结果表。

完整可运行代码

import pandas as pd

# 1. 构造题目给出的样例数据集
df = pd.DataFrame({
    'Group': [1, 2, 3, 1, 2, 3],
    'Year': [2020, 2020, 2020, 2021, 2021, 2021],
    'Count': [3, 5, 2, 4, 6, 3]
})

# 2. 核心计算:小数据集直观写法
result = df.groupby('Year', as_index=False).apply(
    lambda g: pd.Series({
        'Ratio': g.loc[g['Group'] == 1, 'Count'].sum() / g.loc[g['Group'] > 1, 'Count'].sum()
    })
)

# 3. 打印结果验证
print(result)

运行输出结果

Year     Ratio
0  2020  0.428571
1  2021  0.444444

计算值和预期完全匹配:2020年比值为3/(5+2)=3/7≈0.4286,2021年比值为4/(6+3)=4/9≈0.4444。

补充说明

  • 处理百万行以上大规模数据集时,推荐用性能更高的条件聚合写法替代apply,减少遍历开销:
# 大数据量高性能写法
result = df.groupby('Year', as_index=False).agg(
    count_g1=('Count', lambda s: s[df.loc[s.index, 'Group'] == 1].sum()),
    count_other=('Count', lambda s: s[df.loc[s.index, 'Group'] > 1].sum())
).assign(Ratio=lambda x: x['count_g1'] / x['count_other'])[['Year', 'Ratio']]
  • 如果业务数据中存在某年无Group=1记录、或Group>1总计数为0的场景,需要在除法逻辑前增加判空、非0校验,避免出现除以0报错或空值异常。
  • 如果需要输出分数形式而非浮点数结果,可以引入标准库fractions.Fraction替换浮点除法逻辑。

内容的提问来源于stack exchange,提问作者Mai Khanh Truong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:36:25