【发布时间】:2014-03-03 13:13:32
【问题描述】:
我有很长的时间序列,例如。
import pandas as pd
index=pd.date_range(start='2012-11-05', end='2012-11-10', freq='1S').tz_localize('Europe/Berlin')
df=pd.DataFrame(range(len(index)), index=index, columns=['Number'])
现在我想提取每天的所有子数据帧,以获得以下输出:
df_2012-11-05: data frame with all data referring to day 2012-11-05
df_2012-11-06: etc.
df_2012-11-07
df_2012-11-08
df_2012-11-09
df_2012-11-10
避免检查 index.date==give_date 是否非常慢的最有效方法是什么。此外,用户事先并不知道帧中的天数范围。
有什么提示可以用迭代器做到这一点吗?
我目前的解决方案是这样,但它不是那么优雅,并且有两个问题定义如下:
time_zone='Europe/Berlin'
# find all days
a=np.unique(df.index.date) # this can take a lot of time
a.sort()
results=[]
for i in range(len(a)-1):
day_now=pd.Timestamp(a[i]).tz_localize(time_zone)
day_next=pd.Timestamp(a[i+1]).tz_localize(time_zone)
results.append(df[day_now:day_next]) # how to select if I do not want day_next included?
# last day
results.append(df[day_next:])
这种方法存在以下问题:
- a=np.unique(df.index.date) 可能需要很长时间
- df[day_now:day_next] 包括 day_next,但我需要在范围内排除它
【问题讨论】:
标签: python indexing pandas time-series