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

Python Pandas按COTA分组新增上一年最高Mark值列的实现方法

实现代码

import pandas as pd

# 示例数据初始化
df = pd.DataFrame({
    'COTA': ['A','A','A','A','A','B','B','B','B'],
    'Date': ['14/10/2021','19/10/2020','29/10/2019','30/09/2021','20/09/2020','20/10/2021','29/10/2020','15/10/2019','10/09/2020'],         
    'Mark': [1,2,3,4,5,1,2,3,3]
})

# 转换日期格式,提取年份字段
df['Date'] = pd.to_datetime(df['Date'], dayfirst=True)
df['Year'] = df['Date'].dt.year

# 统计每个COTA每一年的Mark最大值
cota_year_max = df.groupby(['COTA', 'Year'])['Mark'].max().reset_index(name='current_year_max')

# 构建上一年映射关系:当前年的最大值 = 下一年的上一年最大值
cota_year_max['map_year'] = cota_year_max['Year'] + 1
cota_year_max = cota_year_max.rename(columns={'current_year_max': 'Max_MarkLastYear'})

# 关联回原表得到结果
df = df.merge(
    cota_year_max[['COTA', 'map_year', 'Max_MarkLastYear']],
    left_on=['COTA', 'Year'],
    right_on=['COTA', 'map_year'],
    how='left'
)

# 清理临时字段
df = df.drop(columns=['Year', 'map_year'])
print(df)

逻辑说明

  1. 先将字符串格式的日期转换为Pandas日期类型,提取每条记录对应的年份,作为后续分组和匹配的依据
  2. 按COTA+年份分组,计算每个分组的Mark最大值,得到每个COTA每年的最高Mark中间表
  3. 给中间表新增映射年份字段,值为原年份+1,这样中间表中某一年的最高Mark,就对应了映射年份的上一年最高Mark
  4. 将中间表和原表关联:用原表的COTA+年份匹配中间表的COTA+映射年份,匹配不到的位置自动填充NaN,符合需求
  5. 最后删除计算过程中新增的临时字段,得到最终结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:54:02