2016-08-11 2 views
1

대용량 파일 (50GB)을 처리하기 위해 Dask를 사용하려고합니다. 일반적으로 메모리에로드하고 팬더를 사용합니다. 두 개의 열 "A"와 "B"를 그룹화하고 열 "C"가 값으로 시작될 때마다 특정 그룹의 해당 열에서 해당 값을 반복하려고합니다. 팬더에서Dask의 기본 groupby 작업

, 나는 다음을 수행하게

df['C'] = df.groupby(['A','B'])['C'].fillna(method = 'ffill') 

은 무엇 DASK에 해당하는 것입니까? 또한 , 나는

내 진행 지금까지

당신을 감사합니다, 조금 팬더에 반대 DASK에 문제를 구조화하는 방법으로 손실입니다 :

첫 번째 설정된 인덱스 :

df1 = df.set_index(['A','B']) 

그런 GROUPBY :

df1.groupby(['A','B']).apply(lambda x: x.fillna(method='ffill').compute() 

답변

1

그것은 DASK를 표시 현재 GroupBy 객체에 대해 fillna 메소드를 구현하지 않습니다. 나는 얼마 전에 PRing을 시도했고 아주 빨리 포기했다.

또한 dask는 method 매개 변수를 지원하지 않습니다 (지연 알고리즘을 구현하는 것이 항상 쉬운 것은 아니므로). 이것에 대한

해결 방법과 같이, 그룹화하기 전에 fillna을 사용할 수 있습니다 :

df['C'] = df.fillna(0).groupby(['A','B'])['C']

이 테스트되지 않았지만.

당신은 찾을 수 있습니다 내 여기 시도 (실패) :

+0

https://github.com/nirizr/dask/tree/groupy_fillna 당신에게 Nirlzr 감사드립니다. 저는 각 그룹의 가치에 NAN 주제를 채우고 싶습니다. 일반적으로 그룹마다 다릅니다. 다른 그룹에 속하더라도 모든 NAN에 동일한 가치를 부여하는 솔루션입니까? – dleal

+0

예, 불행히도 당신이 맞습니다. 그것이 당신의 목표라면 - df [ 'C'] = df [ 'C']. fillna (c_fill)'와 비슷한 것이 될 것입니까? – NirIzr

+0

참고 :이 작은 예제에서는 : http://stackoverflow.com/questions/39048181/groupby-of-splitted-data-pandas 만약 내가 A를 dask 데이터 프레임으로 읽으면 다음 명령이 작동합니다 : A.groupby ('ID') [ 'value']. ​​apply (lambda x : x.fillna (method = 'ffill')) 그러나 큰 데이터 집합에서 다음 오류가 발생합니다. ValueError : 문자열을 float로 변환 할 수 없습니다. T – dleal