반응형
groupby
이후에 apply
를 병렬화하기 위해 rosetta.parallel.pandas_easy
를 사용했습니다. 예를 들면 다음과 같습니다.
from rosetta.parallel.pandas_easy import groupby_to_series_to_frame
df = pd.DataFrame({'a': [6, 2, 2], 'b': [4, 5, 6]},index= ['g1', 'g1', 'g2'])
groupby_to_series_to_frame(df, np.mean, n_jobs=8, use_apply=True, by=df.index)
그러나 DataFrame을 반환하는 함수를 병렬화하는 방법을 알아 낸 사람이 있습니까? 이 코드는 예상대로 rosetta code>에 대해 실패합니다.
def tmpFunc(df):
df['c'] = df.a + df.b
return df
df.groupby(df.index).apply(tmpFunc)
groupby_to_series_to_frame(df, tmpFunc, n_jobs=1, use_apply=True, by=df.index)
해결 방법
실제로 팬더에 내장되어야하지만 작동하는 것 같습니다.
import pandas as pd
from joblib import Parallel, delayed
import multiprocessing
def tmpFunc(df):
df['c'] = df.a + df.b
return df
def applyParallel(dfGrouped, func):
retLst = Parallel(n_jobs=multiprocessing.cpu_count())(delayed(func)(group) for name, group in dfGrouped)
return pd.concat(retLst)
if __name__ == '__main__':
df = pd.DataFrame({'a': [6, 2, 2], 'b': [4, 5, 6]},index= ['g1', 'g1', 'g2'])
print 'parallel version: '
print applyParallel(df.groupby(df.index), tmpFunc)
print 'regular version: '
print df.groupby(df.index).apply(tmpFunc)
print 'ideal version (does not work): '
print df.groupby(df.index).applyParallel(tmpFunc)
참조 페이지 https://stackoverflow.com/questions/26187759
반응형
'파이썬' 카테고리의 다른 글
파이썬 판다에서 단일 열을 반올림 (0) | 2020.12.06 |
---|---|
파이썬 Filter rows of a numpy array? (0) | 2020.12.06 |
파이썬 인덱스 배열을 기반으로 배열을 재정렬하는 방법 (0) | 2020.12.06 |
파이썬 Mac + Anaconda에서 Qt 디자이너 앱은 어디에 있습니까? (0) | 2020.12.06 |
파이썬 How can I randomly choose a maths operator and ask recurring maths questions with it? (0) | 2020.12.06 |
댓글