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
相关产品推荐
相关产品推荐

