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

如何对含YYYY-MM-DD格式date_created列的Pandas DataFrame按年月分组统计?

按年月维度统计Pandas DataFrame日期数据

当然可以!不用被value_counts()自带的日信息困扰,咱们有几种简洁的方法来实现仅按年、月分组统计的需求:

方法1:利用dt.to_period('M')聚合到月份周期

这是最推荐的方法,因为它保留了日期的时间属性,排序时更方便:

  1. 先确保日期列是datetime类型(如果还没转换的话):
import pandas as pd
df['date_created'] = pd.to_datetime(df['date_created'])
  1. 提取年月周期并统计数量:
monthly_stats = df['date_created'].dt.to_period('M').value_counts().sort_index()
  • dt.to_period('M')会把每个日期转换为对应的年月周期(比如2017-10-05变成2017-10)
  • sort_index()让结果按时间顺序排列,而不是默认的计数降序

如果想把结果显示为MM/YYYY格式,只需要把索引转成字符串:

monthly_stats.index = monthly_stats.index.strftime('%m/%Y')

方法2:转成MM/YYYY字符串后统计

如果你更习惯直接处理字符串格式,可以用dt.strftime()转换后再统计:

monthly_stats = df['date_created'].dt.strftime('%m/%Y').value_counts()

⚠️ 注意:这种方法得到的结果是按字符串排序的(比如01/2017会排在10/2016前面),如果需要按时间顺序排序,可以先按原日期排序再分组,或者用方法1更稳妥。

方法3:用groupby分组统计

另一种经典的分组方式,逻辑更直观:

monthly_stats = df.groupby(df['date_created'].dt.to_period('M')).size()

groupby按年月周期分组后,size()返回每组的记录数,结果默认按时间顺序排列。

举个实际例子

假设你的DataFrame是这样的:

data = {'date_created': ['2017-10-05', '2017-10-12', '2018-01-03', '2017-10-05', '2018-01-15']}
df = pd.DataFrame(data)
df['date_created'] = pd.to_datetime(df['date_created'])

用方法1处理后,你会得到:

10/2017    3
01/2018    2
dtype: int64

完全符合你要的仅按年月统计的需求!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:48:50