Python Pandas:按PERMNO分组,按月度汇总PR列累计值
按PERMNO分组并按月-年维度计算PR列累计求和的实现方法
核心思路
先将日期列转换为Pandas可识别的日期类型,提取出年-月维度的分组键,再结合PERMNO进行分组,最后对PR列求和即可得到目标结果。
分步实现代码
- 转换日期列类型
确保date列是Pandas日期时间类型,否则无法提取年月信息:
df['date'] = pd.to_datetime(df['date'])
- 生成年-月分组键
使用dt.to_period('M')生成高效的年月周期类型,也可转为字符串格式:
# 生成周期类型的年月(推荐,大数据量下更高效) df['year_month'] = df['date'].dt.to_period('M') # 若需要字符串格式的"YYYY-MM",可替换为: # df['year_month'] = df['date'].dt.strftime('%Y-%m')
- 分组求和并整理结果
按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
相关产品推荐
相关产品推荐

