저는 pandas
과 numpy
을 처음 접했고 몇 가지 일을하는 가장 좋은 방법을 찾아 내려고했습니다.팬더 데이터 프레임에 벡터화 된 기능을 적용 할 수 있습니까?
지금은 dataframe
의 모든 행에서 함수를 호출하려고합니다. 이 함수에 세 개의 numpy
배열을 전달하면 매우 빠르지 만 dataframe
에 apply
을 사용하면 속도가 매우 느립니다.
내 생각에 numpy
은 첫 번째 경우에는 벡터화 된 기능을 사용하고 두 번째 경우에는 그렇지 않습니다. 해당 최적화를 사용하려면 pandas
을 얻을 수있는 방법이 있습니까? 기본적으로, 의사 코드에서 나는 for row in frame: func(row['a'], row['b'], row['c'])
같은 것을하고 있다고 생각하지만 func(col['a'], col['b'], col['c'])
을하고 싶습니다.
다음은 내가하려는 일의 예입니다.
import numpy as np
import pandas as pd
from scipy.stats import beta
count = 100000
# If I start with a given dataframe and use apply, it's very slow
df = pd.DataFrame(np.random.uniform(0, 1, size=(count, 3)), columns=['a', 'b', 'c'])
df.apply(lambda frame: beta.cdf(frame['a'], frame['b'], frame['c']), axis=1)
# However, if I split out each column into a numpy array, this is very fast.
a = df['a'].as_matrix()
b = df['b'].as_matrix()
c = df['c'].as_matrix()
beta.cdf(a, b, c)
# But at this point I've lost the context of the dataframe.
# I would like to keep the results in a new column for further processing
벡터화는 기능에 따라 다릅니다. 그래서, 당신은 단지'beta.cdf'를 벡터화하려고합니까, 아니면 다른 것들이있을 수 있습니까? – Divakar
그래서 beta.cdf는 이미 배열 (및 시리즈)을 허용합니다. 왜 대신에 apply를 사용합니까? – ayhan
''beta.cdf (df.a, df.b, df.c) '를 호출하지 않는 이유는 무엇입니까? – BrenBarn