python - 在 Pandas 数据帧上计算时,仅对函数中的一些参数进行矢量化
问题描述
我编写了一个函数,旨在根据其他两列计算一个新的数据帧列,作为来自另一个数据帧的几个数据点。我想以矢量化的方式将此函数应用于主数据帧,以便以这种方式计算 2 列输入。同时,我希望第三个参数是一个常量数据帧,用于单独的插值计算(即未矢量化)。如何实现?
主要功能(例如):
def calc_fitted_values(L, option, df_ref):
'''
This calculates an outputval for each combination of L and option, based
on intermediate calculations involving fitted values from df_ref.
- L is some column in my main dataframe
- option is a second column in the main dataframe
- df_ref is a separate data frame used in the pre-calculations here
'''
df_ref_option = df_ref[df_ref['option']==option] # take slice of df_ref based on option
x = df_ref_option['x'].values # get data columns to be used for polyfit
y = df_ref_option['y'].values
C = np.polyfit(np.log(x), np.log(y), 1); # use polyfit to get log fit of the reference data
a = np.exp(C[1]);
b = C[0];
outputval = a*(L**b)
return outputval
功能需要的用法:
df['outputval']] = calc_fitted_values(df['L'], df['option'], df_ref)
在此示例中,L
和option
将是从我的主要数据框列 ( df
) 获得的数组值,但df_ref
在形状和大小方面无关。
我怎样才能最好地为这种情况编写一个函数?
谢谢。
编辑:我目前的“解决方案”是使用 lambda ...
f = lambda L, option : calc_fitted_values(L, option, df_ref)
df['outputval'] = np.vectorize(f)(df['L'].values, df['option'].values)
但这似乎非常缓慢。可能是由于每次都通过 with 计算df_ref
,所以有一个返回 lambda 定义函数的函数会更好吗?不确定最好的方法。
解决方案
您可以使用partial
from functools import partial
func = partial(calc_fitted_values, df_ref=df_ref)
df['outputval'] = np.vectorize(func)(df['L'], df['option'])
我希望这有帮助
推荐阅读
- c# - 如何使用 smtp 从 noreply@example.com 内部向另一个人发送电子邮件
- python - 尝试设置 Flask 密钥时的奇怪输出
- twitter-bootstrap - 使 bootstrap-vue b-table 'Id' 列不可见
- c# - WPF位图透明背景变黑
- java - 同一集合中的spring data mongodb多个实体
- cmake - 嵌套的 cmake 生成器表达式仅被部分评估
- mysql - 带有左连接的 Mysql 查询 - NULL 记录被隐式类型转换
- iframe - 试图弄清楚为什么谷歌分析报告的用户比我们自己的堆栈多
- python - 未使用 .xs() 和 .get_level_values() 在切片上设置值
- c# - Unity3D - 我无法制作帐户创建系统