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

Pandas中带时分秒日期分组及拆分日期年月的技术咨询

Pandas日期分组与日期字段拆分问题解答

嘿,我来帮你搞定这两个Pandas的实操问题!

问题1:针对含时分秒的日期格式(如2017-06-16 09:34:23)进行按日期分组

首先要确保你的created_at字段是datetime类型,如果它现在是字符串,第一步先转换:

import pandas as pd
# 转换为datetime类型
df['created_at'] = pd.to_datetime(df['created_at'])

接下来分两种常见的分组需求:

  • 按完整日期(忽略时分秒,按天分组):
    可以用dt.date提取日期部分,或者用dt.floor('D')将时间截断到天:
    # 方法1:用dt.date提取日期对象
    daily_groups = df.groupby(df['created_at'].dt.date).groups
    # 方法2:用dt.floor('D')保留datetime类型的日期
    daily_groups = df.groupby(df['created_at'].dt.floor('D')).groups
    
  • 按其他粒度(如年月、小时)分组:
    直接用dt.year/dt.month/dt.hour即可,比如按年月分组:
    monthly_groups = df.groupby([df['created_at'].dt.year, df['created_at'].dt.month]).groups
    

问题2:拆分created_at为年份+月份,并结合mime_type、size分组

你已经完成了基础的分组尝试,现在只需要把created_at替换为拆分后的年月维度即可,同样先确保created_at是datetime类型,然后有两种实现方式:

方式1:先新增年份、月份列,再分组

这种方式更直观,后续查看数据也方便:

# 转换为datetime类型(如果还没转的话)
df['created_at'] = pd.to_datetime(df['created_at'])
# 新增年、月列
df['year'] = df['created_at'].dt.year
df['month'] = df['created_at'].dt.month
# 按mime_type、year、month、size分组
df_1 = df.groupby(['mime_type', 'year', 'month', 'size']).groups
display(df_1)

方式2:直接在groupby中使用dt属性(无需新增列)

如果不想新增列,可以直接在groupby里提取年月,还能给分组后的维度命名:

df['created_at'] = pd.to_datetime(df['created_at'])
# 分组时直接提取年月并命名,避免分组键显示为匿名列
df_1 = df.groupby([
    'mime_type',
    df['created_at'].dt.year.rename('year'),
    df['created_at'].dt.month.rename('month'),
    'size'
]).groups
display(df_1)

另外,你之前的df_mime = df.groupby('mime_type')遍历分组的代码是没问题的,如果要结合年月维度,只需要把groupby的字段改成['mime_type', 'year', 'month'](对应方式1)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 21:32:48