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

基于Pandas实现按年份分组统计协议数、条款总数及平均条款数

Pandas分组统计协议与条款数据

你可以通过分组后多指标聚合的方式一次性得到所有需要的结果,这里提供两种简洁的实现思路:

方法一:先计算单条协议的条款总数(直观易懂)

先给原数据新增一列,统计每一条协议包含的条款总数,再按年份分组聚合:

import pandas as pd

d = {'Agreements': ["Rome", "NewYork", "Paris", "Tokyo"], 'Year': [2012, 2012, 2013, 2013], 
     'Provision1': [1, 1, 1, 1], 'Provision2': [1, 1, 0, 1], 'Provision3': [0, 1, 1, 0]}

df = pd.DataFrame(data=d)

# 新增列:单条协议的条款总数
df['Total_Provisions'] = df[['Provision1', 'Provision2', 'Provision3']].sum(axis=1)

# 按年份分组,同时计算三个指标
result = df.groupby('Year').agg(
    **{'Count Agreements per Year': ('Agreements', 'count'),
       'Count Provisions per Year': ('Total_Provisions', 'sum'),
       'Average Provision per Year': ('Total_Provisions', 'mean')}
).reset_index()

print(result)

方法二:直接在聚合函数中计算(无需新增列)

如果不想修改原数据,可以在分组的lambda函数中直接计算条款总和:

import pandas as pd

d = {'Agreements': ["Rome", "NewYork", "Paris", "Tokyo"], 'Year': [2012, 2012, 2013, 2013], 
     'Provision1': [1, 1, 1, 1], 'Provision2': [1, 1, 0, 1], 'Provision3': [0, 1, 1, 0]}

df = pd.DataFrame(data=d)

result = df.groupby('Year').agg(
    **{'Count Agreements per Year': ('Agreements', 'count'),
       'Count Provisions per Year': (lambda x: x[['Provision1','Provision2','Provision3']].sum().sum()),
       'Average Provision per Year': (lambda x: x[['Provision1','Provision2','Provision3']].sum().sum() / len(x))}
).reset_index()

print(result)

两种方法最终都会得到你需要的结果:

YearCount Agreements per YearCount Provisions per YearAverage Provision per Year
2012252.5
2013242.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 03:01:02