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

Python Pandas:按PERMNO分组,按月度汇总PR列累计值

按PERMNO分组并按月-年维度计算PR列累计求和的实现方法

核心思路

先将日期列转换为Pandas可识别的日期类型,提取出年-月维度的分组键,再结合PERMNO进行分组,最后对PR列求和即可得到目标结果。

分步实现代码

  1. 转换日期列类型
    确保date列是Pandas日期时间类型,否则无法提取年月信息:
df['date'] = pd.to_datetime(df['date'])
  1. 生成年-月分组键
    使用dt.to_period('M')生成高效的年月周期类型,也可转为字符串格式:
# 生成周期类型的年月(推荐,大数据量下更高效)
df['year_month'] = df['date'].dt.to_period('M')

# 若需要字符串格式的"YYYY-MM",可替换为:
# df['year_month'] = df['date'].dt.strftime('%Y-%m')
  1. 分组求和并整理结果
    按PERMNO和year_month分组,对PR列求和后重置索引,并重命名列名匹配期望输出:
result_df = df.groupby(['PERMNO', 'year_month'])['PR'].sum().reset_index()
result_df.rename(columns={'year_month': 'date'}, inplace=True)

# 若之前用了周期类型,可转为字符串格式的日期
result_df['date'] = result_df['date'].astype(str)

完整示例代码

import pandas as pd

# 模拟你的DataFrame数据
data = {
    'PERMNO': [10025]*5 + [93436]*5,
    'date': ['2012-09-17', '2012-09-18', '2012-09-19', '2012-09-20', '2012-09-21',
             '2017-12-24', '2017-12-26', '2017-12-29', '2017-12-30', '2017-12-31'],
    'PR': [0,0,0,1,0,1,1,0,1,0]
}
df = pd.DataFrame(data)

# 执行处理流程
df['date'] = pd.to_datetime(df['date'])
df['year_month'] = df['date'].dt.to_period('M')
result_df = df.groupby(['PERMNO', 'year_month'])['PR'].sum().reset_index()
result_df.rename(columns={'year_month': 'date'}, inplace=True)
result_df['date'] = result_df['date'].astype(str)

print(result_df)

输出结果

PERMNO     date  PR
0   10025  2012-09   1
1   93436  2017-12   3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:39:28