python - 按日期期间拆分数据框
问题描述
我想知道你是否能指出我正确的方向?
我有一个带有 dateindex 和相应值的数据框:
日期|值
2010-10-16 | 485
2010-10-17 | 486
…………
2013-10-12 | 8588
2013-10-12 | 8589
我想按 6 个月的日期块将这个数据帧拆分为单独的数据帧,命名为 period_1、period_2 等等:
period_1 包含从 2010-10-18 到(2010-10-18 + 6 个月)的值
period_2 包含从 (2010-10-18 + 6 个月) 到 (2010-10-18 + 6*2 个月) 等的值。
有没有一种优雅的方式来做到这一点?
我已经通过这样做手动完成了
period_1 = df.loc['2010-10-18':'2011-04-01'] 等等,但这有点棘手......
谢谢你。
解决方案
我更喜欢这里的 DataFrames 字典:
start_date = df['date'].min()
end_date = df['date'].max()
months = (end_date.year - start_date.year) * 12 + (end_date.month - start_date.month)
dfs = {f'period_{i+1}': df[df['date'].between(start_date + pd.DateOffset(months=i),
start_date + pd.DateOffset(months=i+1))] for i in range(months + 1)}
# print (dfs)
print (dfs['period_1'])
date value
0 2010-10-16 485
1 2010-10-17 486
不推荐,但可以通过变量创建 DataFrame:
for i in range(months + 1):
df1 = df[df['date'].between(start_date + pd.DateOffset(months=i), start_date + pd.DateOffset(months=i+1))]
globals()[f'period_{i+1}'] = df1
推荐阅读
- javascript - WebRTC:远程对等流没有得到渲染
- python - 在 python 正则表达式中使用 \r(回车)
- python - 如何在张量流中添加右零值
- database-design - 如何设置删除 EF Core 中的表的特定行为?
- azure - 有没有办法通过查询参数在特定时间从天蓝色媒体服务加载视频?
- java - 是否有可能改变javers的历史?
- node.js - Glitch 上的 NodeJS 应用程序未连接到远程 SQL Server
- python - 对于未满足的每个条件,从列表中删除多个项目
- vue.js - 如何在nuxt中使用“Vue-infinite-loading”而不通过axios加载数据?
- java - 在同一个标签中大摇大摆地分组控制器