我可以将矢量化函数应用于熊猫数据框吗?

Kri*_*per 2 python numpy vectorization dataframe pandas

我对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
Run Code Online (Sandbox Code Playgroud)

Bre*_*arn 5

目前尚不清楚为什么要尝试使用apply。你可以做beta.cdf(df.a, df.b, df.c)