我是pandas
和numpy
的新手,我正在努力找出做某些事情的最佳方法。
现在我正试图在dataframe
的每一行调用一个函数。如果我将三个numpy
数组传递给此函数,速度非常快,但在apply
上使用dataframe
非常慢。
我的猜测是numpy
在第一种情况下使用向量化函数,而在第二种情况下不使用向量化函数。有没有办法让pandas
使用该优化?基本上,在伪代码中,我认为apply
正在执行类似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
答案 0 :(得分:4)
目前尚不清楚为什么要尝试使用apply
。你可以beta.cdf(df.a, df.b, df.c)
。