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

如何使用Pandas按星期拆分时间序列DataFrame

如何用Pandas按星期几拆分时间序列DataFrame?

这问题我之前处理过,用Pandas的datetime属性和分组功能就能轻松搞定,一步步来:

核心思路

先确保你的日期列是datetime类型,然后提取每条记录对应的星期几,最后按星期几分组,把每个组存成独立的DataFrame(用字典来管理最方便)。

完整代码示例

假设你的原始数据已经加载成了Pandas DataFrame,我们直接上手:

import pandas as pd

# 先构造你提供的示例数据(实际使用时替换成你的真实数据)
data = {
    'Date': [
        '2014-12-30 23:00:00', '2014-12-30 23:15:00', '2014-12-30 23:30:00',
        '2014-12-30 23:45:00', '2014-12-31 00:00:00', '2015-01-01 00:00:00',
        '2015-01-02 00:00:00', '2015-01-03 00:00:00', '2015-01-04 00:00:00',
        '2015-01-04 00:00:00', '2015-01-05 00:00:00'
    ],
    'X': [2, 0, 1, 1, 22, 0, 2, 2, 2, 2, 2]
}
df = pd.DataFrame(data)

# 步骤1:将Date列转换为datetime类型(这步很关键,不然没法提取星期信息)
df['Date'] = pd.to_datetime(df['Date'])

# 步骤2:按星期几分组,直接存入字典(键是星期名称,值是对应DataFrame)
# 用dt.day_name()获取英文星期名称,比如'Monday'、'Tuesday'
weekday_dfs = {day: group for day, group in df.groupby(df['Date'].dt.day_name())}

# 现在可以直接通过星期名称访问对应的数据了
print("周一的数据:")
print(weekday_dfs['Monday'])
print("\n周二的数据:")
print(weekday_dfs['Tuesday'])

进阶:使用中文星期名称

如果你习惯用中文的“周一”“周二”,可以先把数字形式的星期(0=周一,6=周日)映射成中文:

# 定义数字到中文星期的映射
weekday_map = {0: '周一', 1: '周二', 2: '周三', 3: '周四', 4: '周五', 5: '周六', 6: '周日'}

# 用dt.weekday获取数字星期,再映射成中文
weekday_dfs_cn = {
    day: group 
    for day, group in df.groupby(df['Date'].dt.weekday.map(weekday_map))
}

# 访问中文键
print("周三的数据:")
print(weekday_dfs_cn['周三'])

注意事项

  • 如果某个星期几没有数据,字典里就不会有对应的键,访问时可以用get方法避免报错:
    # 获取周六的数据,不存在则返回空DataFrame
    saturday_df = weekday_dfs.get('Saturday', pd.DataFrame(columns=df.columns))
    
  • 分组后的DataFrame是原数据的视图,如果要修改,记得用group.copy()创建副本,避免影响原数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:38:23