如何使用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
相关产品推荐
相关产品推荐

