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

pandas如何按日期交叉统计或计数dataframe行,按年季度月统计新建关闭量

实现步骤

首先你需要先把日期列转为pandas的datetime格式,再拆分创建、关闭两类事件分别统计后合并,具体代码如下:

1. 日期格式转换

import pandas as pd

# 原日期为日-月-年格式,指定format转换更稳妥,避免解析出错
dfImport['date_created'] = pd.to_datetime(dfImport['date_created'], format='%d-%m-%Y')
dfImport['date_closed'] = pd.to_datetime(dfImport['date_closed'], format='%d-%m-%Y')

2. 分别统计新建、关闭数量

# 统计各时间维度的新建数量
create_df = dfImport[['id', 'date_created']].copy()
create_df['year'] = create_df['date_created'].dt.year
create_df['qrt'] = create_df['date_created'].dt.quarter
create_df['month'] = create_df['date_created'].dt.month_name()
create_stat = create_df.groupby(['year', 'qrt', 'month'], as_index=False)['id'].count().rename(columns={'id':'number_created'})

# 统计各时间维度的关闭数量,先过滤掉未关闭的空值
close_df = dfImport[['id', 'date_closed']].dropna(subset=['date_closed']).copy()
close_df['year'] = close_df['date_closed'].dt.year
close_df['qrt'] = close_df['date_closed'].dt.quarter
close_df['month'] = close_df['date_closed'].dt.month_name()
close_stat = close_df.groupby(['year', 'qrt', 'month'], as_index=False)['id'].count().rename(columns={'id':'number_closed'})

3. 合并统计结果得到最终表

# 外连接合并两类统计结果,缺失值补0
dfInOut = pd.merge(create_stat, close_stat, on=['year', 'qrt', 'month'], how='outer').fillna(0)

# 计数列转整数,按时间顺序排序
dfInOut[['number_created', 'number_closed']] = dfInOut[['number_created', 'number_closed']].astype(int)
dfInOut['month_sort'] = pd.to_datetime(dfInOut['month'], format='%B').dt.month
dfInOut = dfInOut.sort_values(['year', 'qrt', 'month_sort']).drop(columns=['month_sort']).reset_index(drop=True)

# 实现相同年份、季度只显示第一行的效果,和你给出的示例格式一致
dfInOut.loc[dfInOut.duplicated(subset=['year', 'qrt']), ['year', 'qrt']] = ''
dfInOut = dfInOut.rename(columns={'year':'Year', 'qrt':'Qrt'})

运行完以上代码后输出的dfInOut就完全符合你的预期要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:45:02