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

使用Pandas按天分组DateTimeIndex并统计日期出现频次

统计DateTimeIndex中每日数据频次的实现方法

嘿,这问题我刚好处理过,先确认下你的场景:你已经把DataFrame的索引设置成了DateTimeIndex,数据大概长这样:

timestamp               _id
2018-05-09 16:56:40.940 somedata1
2018-05-09 16:54:03.959 somedata2
2018-05-10 16:53:42.975 somedata3
2018-05-11 16:52:44.897 somedata4
2018-05-11 16:46:35.902 somedata5

你想要统计每个日期的出现频次,得到这样的结果:

day         count
2018-05-09  2
2018-05-10  1
2018-05-11  2

给你两种简单的实现方法,都能轻松搞定:

方法一:用value_counts()快速统计

这种方法步骤简洁,先提取日期部分再统计:

# 从DateTimeIndex中提取日期,统计每个日期的出现次数并按日期排序
daily_counts = df.index.date.value_counts().sort_index()

# 转换成DataFrame并设置列名
result_df = daily_counts.reset_index()
result_df.columns = ['day', 'count']
  • df.index.date会把每个时间戳转换成纯日期对象(比如2018-05-09)
  • value_counts()自动统计每个日期的出现频次
  • sort_index()确保结果按日期先后顺序排列,避免乱序
  • 最后用reset_index()把统计结果的索引转成列,再重命名成你需要的day和count

方法二:用groupby()分组统计

如果你习惯用分组的思路,也可以这么写:

# 按日期分组,计算每组的大小(即频次)
result_df = df.groupby(df.index.date).size().reset_index(name='count')
# 重命名第一列
result_df.columns = ['day', 'count']
  • groupby(df.index.date)按日期对数据分组
  • size()返回每组的行数,也就是该日期的出现次数
  • reset_index(name='count')直接把统计结果转成DataFrame并设置第二列的列名,最后再重命名第一列即可

两种方法都能得到你想要的结果,选哪种全看你个人习惯~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:06:08