Python 我可以将矢量化函数应用于数据帧吗?

Python 我可以将矢量化函数应用于数据帧吗?,python,pandas,numpy,dataframe,vectorization,Python,Pandas,Numpy,Dataframe,Vectorization,我对熊猫和小熊猫非常陌生,我正在尝试找出做一些事情的最佳方法 现在我正试图在数据帧的每一行上调用一个函数。如果我将三个numpy数组传递给这个函数,速度非常快,但是在数据帧上使用apply速度非常慢 我的猜测是numpy在第一种情况下使用矢量化函数,而不是在第二种情况下。有没有一种方法可以让熊猫使用这种优化?基本上,在伪代码中,我认为apply是在为帧中的行func(行['a'],行['b'],行['c'])执行类似的操作,但我希望它执行func(列['a'],列['b'],列['c']) 下面

我对熊猫和小熊猫非常陌生,我正在尝试找出做一些事情的最佳方法

现在我正试图在
数据帧的每一行上调用一个函数。如果我将三个
numpy
数组传递给这个函数,速度非常快,但是在
数据帧上使用
apply
速度非常慢

我的猜测是
numpy
在第一种情况下使用矢量化函数,而不是在第二种情况下。有没有一种方法可以让熊猫使用这种优化?基本上,在伪代码中,我认为
apply
是在为帧中的行func(行['a'],行['b'],行['c'])
执行类似
的操作,但我希望它执行
func(列['a'],列['b'],列['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

不清楚您为什么尝试使用
apply
。您只需执行
beta.cdf(df.a、df.b、df.c)

矢量化将是特定于函数的。那么,你是想把beta.cdf(df.a,df.b,df.c)矢量化还是有其他的呢?那么beta.cdf已经接受数组(和系列)了,为什么你要用apply来代替它呢?为什么不直接调用
beta.cdf(df.a,df.b,df.c)
?对不起,我想不清楚。我从一个
数据帧开始。所以我需要将这些列提取到
numpy
数组中,以便直接调用
beta.cdf
。我可以这样做,但这会丢失数据帧中的所有其他上下文。我将对问题进行编辑以使其更清楚。您不需要将它们转换为numpy数组。见我之前的评论。您只需执行
beta.cdf(df.a、df.b、df.c)
。再次感谢。我没有意识到我可以将
dataframe
列传递到一个向量化函数中。当然可以!回忆一下熊猫数据框中的每一列都是熊猫系列。