如何对含YYYY-MM-DD格式date_created列的Pandas DataFrame按年月分组统计?
按年月维度统计Pandas DataFrame日期数据
当然可以!不用被value_counts()自带的日信息困扰,咱们有几种简洁的方法来实现仅按年、月分组统计的需求:
方法1:利用dt.to_period('M')聚合到月份周期
这是最推荐的方法,因为它保留了日期的时间属性,排序时更方便:
- 先确保日期列是
datetime类型(如果还没转换的话):
import pandas as pd df['date_created'] = pd.to_datetime(df['date_created'])
- 提取年月周期并统计数量:
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
相关产品推荐
相关产品推荐

