python - Pandas Series.apply - 使用另一个系列的参数?

标签 python pandas

我有以下声明:

>>> df['result'] = df['value'].apply(myfunc, args=(x,y,z))

Python 函数 myfunc 是在我开始使用 Pandas 之前编写的,并且设置为采用单个值。参数 x 和 z 是固定的,可以轻松地作为变量或文字传递,但我的 DataFrame 中有一个代表 y 参数的列,所以我正在寻找一种方法来为每行使用该行的值(它们行与行之间有所不同)。

即df['y'] 是我想发送到 myfunc 的一系列值

我的解决方法如下:

values = list(df['value'])
y = list(df['y'])
df['result'] = pd.Series([myfunc(values[i],x,y[i],z) for i in range(0,len(values))])

还有更好的方法吗?

编辑

使用 functools.partial 有一个问题可以解决。如果您的调用不遵循关键字参数,那么它似乎会诉诸位置参数,然后您可能会遇到 'myfunc() gets multiple value for...' 错误。

我修改了coldspeed的答案:

# Function myfunc takes named arguments arg1, arg2, arg3 and arg4
#   The values for arg2 and arg4 don't change so I'll set them when
#   defining the partial (assume x and z have values set)
myfunc_p = partial(myfunc, arg2=x, arg4=z)
df['result'] = [myfunc_p(arg1=w, arg3=y) for w, y in zip(df['value'], df['y'])]

最佳答案

您还可以使用 lambda 对行进行应用,如下所示:

df['result'] = df.apply(lambda row: myfunc(row['value'], y=row['y'], x=x, z=z), axis=1)

关于python - Pandas Series.apply - 使用另一个系列的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51804410/

相关文章:

python - 操作 Pandas 数据框的数据

python - 如何在 Pandas 中比较 3 个或更多 DataFrame 的相等性?

python - 尝试使用 pandas datareader 获取股票数据时出现 SSL 错误

python - django-extensions:使用脚本中文件夹内的 runscript 运行脚本

c++ - zmq 呼吸机/ worker /水槽范式不适用于/子进程

python - Tic-Tac-Toe 游戏 Python 的 for 循环中的迭代是如何工作的?

python - 将(设置)应用于 Pandas 数据框中的两列

python - 开放式 CV 轮廓面积计算错误

python - 如何读取用户在python中输入的文本文件

python - 使用 pandas to_datetime 时如何定义格式?