2017-01-05 1 views
0

에 따라 시계열의 여러 하위 집합 만들기 토요일 오전 0 시부 터 토요일 오전 0 시까 지 일주일 분의 데이터를 제공합니다.I는 다음과 같이 시계열을 포함하는 DataFrame이 기간

나는 timeutil에서 RRule로 그렇게 할 수있는 방법을 생각할 수 있지만, Pandas Periods를 사용하는보다 직관적 인 방법이있을 것 같습니다.

그러나 나는 그것을 아주 처음부터 어디서부터 시작해야할지 모르겠다.

Pd.DataFrame(dict, columns=['timestamp','open','high','low','close','volume']) 

dict={'volume': {Timestamp('2005-03-06 19:00:00'): 521.0, Timestamp('2005-03-06 20:00:00'): 234.0, Timestamp('2005-03-06 20:30:00'): 164.0, Timestamp('2005-03-06 21:00:00'): 99.0, Timestamp('2005-03-06 17:30:00'): 1603.0, Timestamp('2005-03-06 21:30:00'): 389.0, Timestamp('2005-03-06 18:00:00'): 590.0, Timestamp('2005-03-06 17:00:00'): 1668.0, Timestamp('2005-03-06 19:30:00'): 79.0, Timestamp('2005-03-06 18:30:00'): 213.0}, 'low': {Timestamp('2005-03-06 19:00:00'): 1226.25, Timestamp('2005-03-06 20:00:00'): 1226.0, Timestamp('2005-03-06 20:30:00'): 1226.0, Timestamp('2005-03-06 21:00:00'): 1226.0, Timestamp('2005-03-06 17:30:00'): 1225.75, Timestamp('2005-03-06 21:30:00'): 1225.5, Timestamp('2005-03-06 18:00:00'): 1226.75, Timestamp('2005-03-06 17:00:00'): 1225.0, Timestamp('2005-03-06 19:30:00'): 1226.25, Timestamp('2005-03-06 18:30:00'): 1226.75}, 'timestamp': {Timestamp('2005-03-06 19:00:00'): 732011.79166666663, Timestamp('2005-03-06 20:00:00'): 732011.83333333337, Timestamp('2005-03-06 20:30:00'): 732011.85416666663, Timestamp('2005-03-06 21:00:00'): 732011.875, Timestamp('2005-03-06 17:30:00'): 732011.72916666663, Timestamp('2005-03-06 21:30:00'): 732011.89583333337, Timestamp('2005-03-06 18:00:00'): 732011.75, Timestamp('2005-03-06 17:00:00'): 732011.70833333337, Timestamp('2005-03-06 19:30:00'): 732011.8125, Timestamp('2005-03-06 18:30:00'): 732011.77083333337}, 'open': {Timestamp('2005-03-06 19:00:00'): 1227.0, Timestamp('2005-03-06 20:00:00'): 1226.25, Timestamp('2005-03-06 20:30:00'): 1226.5, Timestamp('2005-03-06 21:00:00'): 1226.0, Timestamp('2005-03-06 17:30:00'): 1225.75, Timestamp('2005-03-06 21:30:00'): 1225.75, Timestamp('2005-03-06 18:00:00'): 1227.0, Timestamp('2005-03-06 17:00:00'): 1225.75, Timestamp('2005-03-06 19:30:00'): 1226.25, Timestamp('2005-03-06 18:30:00'): 1227.25}, 'high': {Timestamp('2005-03-06 19:00:00'): 1227.0, Timestamp('2005-03-06 20:00:00'): 1226.5, Timestamp('2005-03-06 20:30:00'): 1226.5, Timestamp('2005-03-06 21:00:00'): 1226.25, Timestamp('2005-03-06 17:30:00'): 1227.5, Timestamp('2005-03-06 21:30:00'): 1226.0, Timestamp('2005-03-06 18:00:00'): 1227.5, Timestamp('2005-03-06 17:00:00'): 1226.25, Timestamp('2005-03-06 19:30:00'): 1226.75, Timestamp('2005-03-06 18:30:00'): 1227.5}, 'close': {Timestamp('2005-03-06 19:00:00'): 1226.25, Timestamp('2005-03-06 20:00:00'): 1226.25, Timestamp('2005-03-06 20:30:00'): 1226.0, Timestamp('2005-03-06 21:00:00'): 1226.0, Timestamp('2005-03-06 17:30:00'): 1227.0, Timestamp('2005-03-06 21:30:00'): 1225.5, Timestamp('2005-03-06 18:00:00'): 1227.25, Timestamp('2005-03-06 17:00:00'): 1225.5, Timestamp('2005-03-06 19:30:00'): 1226.5, Timestamp('2005-03-06 18:30:00'): 1226.75}} 
+0

이미지 대신 실제 데이터를 psot 해 주실 수 있습니다. – e4c5

+0

@ e4c5 몇 줄을 붙여 넣었습니다. 나는 2 주 가치의 데이터를 붙여 넣으려고했으나 분명히 너무 많은 것을 붙여 넣었다. 어쩌면 작은 기간을 사용하여 테스트 할 수도 있습니다. –

답변

1

당신은 사용할 수 있습니다 :

#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) 
밖으로

먼저 필터 주말

데이터 ..... 그런

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

뭔가 : 이상적으로는 같은 것 dayofweek으로, 필요한 경우 boolean indexing으로 변경하십시오.

#df = df[df.index.dayofweek < 5] 
#print (df) 

다음 주 주파수 period_range를 사용

#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 각 기간 to_timestamp 선택 값을 변환과 함께 : 사용할 수 없습니다

Subsets = [ df.loc[x.to_timestamp('D', how='s'): x.to_timestamp('D', how='e')] for x in per] 
#print (Subsets) 

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) 
관련 문제