如何用更高分辨率的索引器(freq = 1D)切割低分辨率的pandas df(freq = 1min)?

时间:2015-11-08 17:20:40

标签: datetime numpy pandas

我想保留“1分钟”。数据的分辨率,并返回df的一个子集,其中日期与索引器

中的三个中的一个匹配
android:scaleType="fitXY"

以下不起作用:

import pandas as pd
import numpy as np

df=pd.DataFrame(index=pd.date_range("2013-10-08 00:00:00","2015-10-08 00:00:00", freq="1min",tz='UTC'))
df['data']=np.random.random_integers(0,1,len(df))
indexer=["2013-12-24","2014-01-16","2015-02-19"]

1 个答案:

答案 0 :(得分:0)

您必须按功能get_loc获取整数位置,然后您可以按df.ix选择数据。

但你不仅需要午夜,还需要一天1440分钟。

我再次使用列表理解功能range,范围从00:00:00+00:0023:59:00+00:00午夜。最后flat列表已创建,因为范围返回了列表列表。

print df.head()
#                           data
#2013-10-08 00:00:00+00:00     0
#2013-10-08 00:01:00+00:00     0
#2013-10-08 00:02:00+00:00     1
#2013-10-08 00:03:00+00:00     0
#2013-10-08 00:04:00+00:00     0

#list comprehension - get loc of dates
idx = [df.index.get_loc(pd.to_datetime(i)) for i in indexer]
print idx
#[110880, 144000, 718560]

#add 1439 + 1 minutes, because range is 0 indexing
idx = [range(i, i+1440) for i in idx]
#flatten list
idx = [y for x in idx for y in x]

#select df by integer indexes
df = df.ix[idx]

print df.head()
#                           data
#2013-12-24 00:00:00+00:00     1
#2013-12-24 00:01:00+00:00     0
#2013-12-24 00:02:00+00:00     0
#2013-12-24 00:03:00+00:00     0
#2013-12-24 00:04:00+00:00     1
print df.tail()
#                           data
#2015-02-19 23:55:00+00:00     1
#2015-02-19 23:56:00+00:00     0
#2015-02-19 23:57:00+00:00     0
#2015-02-19 23:58:00+00:00     0
#2015-02-19 23:59:00+00:00     0