2014-07-24 4 views
0

거대한 팬더 라이브러리에 처음입니다.팬더를 사용하여 시계열에서 일일 범위를 추출하십시오

나는 시간당 데이터 프레임 예컨대 :

  date_time  open  high  low  close  volume 
97759 2014-07-17 18:00:00 0.93702 0.93790 0.93696 0.93789 2098 

나는 매일하지만 상대 일에 대한 시간별 데이터를 처리 할 필요가 있습니다.

1) 어떻게 매일 그 위에 나 나 루프를 수행하고 그때 아마 다시 그 위에 루프를 위해 (혼자 그 일에 대한 시간별 시계열을 추출 어떻게

2

) 또는 최대/최소 값을 가져 기타)?

+0

당신이 [리샘플링] (에 대해 얘기하는 http://pandas.pydata.org /피 andas-docs/stable/timeseries.html # up-and-downsampling) – EdChum

+0

@EdChum 모르겠지만 모양이 다릅니다. 나는 여전히 시간별 데이터가 필요하며, 매일 매일의 시간별 데이터가 자체 데이터입니다. 나는 어떻게해서든지'groupBy' 또는'bday()'를 사용할 수 있고 그것으로부터 새로운 프레임을 얻을 수있는 일일 루프를 생각 했습니까? – Tjorriemorrie

+1

샘플 입력을 단락시키고 (1 줄 이상) 출력해야합니다 – Jeff

답변

1

당신은 groupby와 올바른 생각을 가지고 있습니다. 그 날까지 데이터를 분할하여 해당 그룹에 대한 액세스 권한을 부여 할 수 있습니다. 여기의 트릭은 Series df [ 'date_time']에서 apply 메소드를 사용하는 것입니다. 계열에 적용하면 입력 요소 요소를 현명하게 적용하고 새로운 계열을 반환합니다. 이를 사용하여 일별로 나눌 수 있으며 다시 한 시간 씩 나눌 수 있습니다.

입력

df = """   date_time  open  high  low  close  volume 
97759 2014-07-17 18:00:00 0.93702 0.93790 0.93696 0.93789 2098 
97758 2014-07-18 19:00:00 0.93702 0.93790 0.93696 0.93789 2098 
97756 2014-07-18 20:00:00 0.93702 0.93790 0.93696 0.93789 2098""" 

df = pd.read_csv(StringIO(df),sep="\s\s+") 
df['date_time'] = df["date_time"].apply(lambda x: pd.to_datetime(x)) 

솔루션

#groupSeries = df["date_time"].apply(lambda x: pd.to_datetime(x).date()) #if date_time column isn't already datetime 
groupSeries = df["date_time"].apply(lambda x: x.date()) #if date_time column is datetime obj 

grouped = df.groupby(groupSeries) 
for k,g in grouped: 
    print k,"\n",g,"\n"*2 

출력

key: 2014-07-17 
       date_time  open high  low close volume 
97759 2014-07-17 18:00:00 0.93702 0.9379 0.93696 0.93789 2098 

key: 2014-07-18 
       date_time  open high  low close volume 
97758 2014-07-18 19:00:00 0.93702 0.9379 0.93696 0.93789 2098 
97756 2014-07-18 20:00:00 0.93702 0.9379 0.93696 0.93789 2098 
관련 문제