2017-12-06 1 views
0

각 데이터 프레임에 가격 및 타임 스탬프 열이있는 데이터 프레임 사전이 있습니다. 이 같은 것 {'A':df1, 'B':df2}팬더 : 시간에 따라 데이터 프레임 사전 청킹

나는 시간 기록의 H 시간 청크에서 dict 내부의 데이터 프레임을 조각 내고 모든 청크에 대해 다른 기능 (일부 계산을 수행함)에이 데이터 프레임의 dict을 전달할 수있는 함수를 작성해야한다. .

어떻게 진행하나요? 예를 들어

def foo(dict_of_dataframes): 
    for id, df in dict_of_dataframes.items(): 
     do_something() 

def boo(dict_of_dataframes, chunksize): 
    """ 
    Needs to chunk up the @dict_of_dataframes in @chunksize hours 
    and needs to call foo function on these chunks of 
    @dicts_of_dataframes 
    """ 

샘플 데이터 :

df1: 
Time      Price 
2017-03-07 09:47:31+00:00 100 
2017-03-07 11:27:31+00:00 120 
2017-03-07 14:47:31+00:00 150 
2017-03-07 17:17:31+00:00 135 
2017-03-07 20:57:31+00:00 200 
2017-03-08 03:27:31+00:00 120 
2017-03-08 09:57:31+00:00 100 
2017-03-08 11:27:31+00:00 150 

df2: 
Time      Price 
2017-03-07 09:07:31+00:00 200 
2017-03-07 10:27:31+00:00 300 
2017-03-07 12:47:31+00:00 100 
2017-03-07 17:47:31+00:00 250 
2017-03-07 22:27:31+00:00 300 
2017-03-08 01:57:31+00:00 500 
2017-03-08 02:57:31+00:00 500 
2017-03-08 10:27:31+00:00 100 

나는 우우 기능과 도움이 필요합니다. 이것이 어떻게 앞으로 나아갈 것입니까?

또한 다른 함수 호출을 시뮬레이트하는 이러한 종류의 boo 함수에 대한 특정 용어가 있습니다. 이런 것들을 몇 번 보았습니다.이 '함수 호출자'함수를 디자인하는 방법을 설명하는 리소스를 지적 할 수 있다면 정말 고맙겠습니다.

+0

샘플 데이터, 샘플 데이터, 샘플 데이터 – Dark

+0

샘플링은 가능하지만 해당 청크의 전체 사전을 foo 함수에 전달한 다음 두 번째 청크와 함께 두 번째 사전을 전달해야합니다. ... 그 부분을 코드화하는 방법을 이해할 수 없습니다 ... – skybunk

+0

솔루션에서 작업하기 위해 샘플 데이터가 필요하다는 것을 의미합니다. 데이터 프레임에 투자하는 데 드는 비용이 높습니다. – Dark

답변

0

나는 실질적으로 원하는 것은 resample을 사용하여 얻을 수 있다고 생각합니다. 기본적으로 datetime의 groupby입니다. 당신이 루프를 원하는 경우 BTW,

def boo(dict_dfs, hours): 
    return {k:{hr:v for hr, v in df.groupby(Grouper(key='Time', freq=f'{hours}H'))} for k, df in dict_dfs.items()} 

: 당신이 6 시간 이내에 거래 금액을 필요로 가정 할 때, 당신이 사용할 수 있습니다 : 당신은 100 % 당신이 대신 dicts을 필요로하는 경우, 지금

def boo(dict_dfs, hours): 
    return {k: v.resample(f'{hours}H').sum() for k,v in dict_dfs.items()} 

groupby를 사용 dicts의 {key, value}를 통해 dict.items()를 사용하고 dict 자체는 사용하지 마십시오.

그리고 또 하나주의 사항 : 필자는 사람들의 데이터 구조가 여러 번 복잡 해지는 것을 보았습니다. 대부분 데이터 프레임에 대한 설명이 필요하지 않습니다. category 열 또는 다중 색인 (예 : [category, Time] 다중 색인과 같은 하나의 데이터 프레임을 사용할 수 있습니다.

+0

예, dict.items()를 사용합니다. 오타를 유감스럽게 생각합니다. 목록 열람에 정말 감사하지만 이해할 수는 없습니다 ... 그룹과 함께 여기에서 한 일을 설명해 주시겠습니까? 사전을 지나가는 foo 함수를 어떻게 호출하고 있습니까? – skybunk

+0

여기'boo'는'foo' 함수를 실행하지 않습니다. 주어진 dict의 각 데이터 프레임에 대해 청크의 dict을 반환합니다. . - 하나의 새로운 DICT DF 쌍을 새 사전에 : 당신의 예에서 , 당신은 기간으로 그들을 foo는 (우우 (DDF 여기, 6) 여기 DICT 이해 단지 그룹 조각으로 각 DF를 사용하여 저장할 수 있어야한다 초기 사전에있는 각 데이터 프레임에 대해 –

+0

고맙습니다. 정말 고마워요. – skybunk