基于周期创建时间序列的多个子集

2024-06-09 16:26:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含以下时间序列的数据帧:

enter image description here

我想创建这个DataFrame的多个子集,每个子集都包含一周内的数据,从周日凌晨0点到星期六上午0点。在

我可以用timeutil的RRule想出一种方法来实现这一点,但似乎有一种更直观/直接的方法来使用Pandas Periods。在

不过,我对它相当陌生,所以不知道从哪里开始寻找。理想的情况是:

Period= Sun 0am to Sat 0am
Subsets=[]
for Period in DataFrame:
    Subsets.append(DataFrame[Period])

像那样。。。。。在

数据:

^{pr2}$

Tags: 数据方法dataframepandas时间序列直观子集
1条回答
网友
1楼 · 发布于 2024-06-09 16:26:39

您可以使用:

#sample dataframe
start = pd.to_datetime('2016-12-28')
rng = pd.date_range(start, periods=100, freq='100min')
df = pd.DataFrame({'timestamp': rng, 'X': range(100), 
                   'id': ['a'] * 30 + ['b'] * 30 + ['c'] * 40 })  
df = df.set_index(['timestamp'])
#print (df)

如果需要,首先用^{}^{}过滤掉周末:

^{pr2}$

然后将^{}与周频率一起使用:

#first date in index
first_date = df.index[0]
#last date in index
last_date = df.index[-1]
per = pd.period_range(first_date,last_date, freq='W')
print (per)
PeriodIndex(['2016-12-26/2017-01-01', 
             '2017-01-02/2017-01-08'], dtype='period[W-SUN]', freq='W-SUN')

最后通过list comprehension创建Subsets,并转换每个句点^{},然后按loc选择值:

^{4}$

如果不能使用loc,因为端点不包括在Dataetimeindex中,请使用boolean indexing

Subsets = [ df[(df.index > x.to_timestamp('D', how='s')) & 
               (df.index < x.to_timestamp('D', how='e'))] for x in per]
#print (Subsets)

相关问题 更多 >