将具有多个参数的函数应用于多列以创建新列[重复]

Posted

技术标签:

【中文标题】将具有多个参数的函数应用于多列以创建新列[重复]【英文标题】:Apply function with multiple argument to multiple columns to create a new column [duplicate] 【发布时间】:2019-01-02 21:44:25 【问题描述】:

我想使用 apply 函数在我编写的函数上的两个现有列中创建一个新的数据框。

使用的包:

import math 
import scipy.stats as st
import pandas as pd

以下函数用于计算威尔逊分数置信区间的下限:

def ci_lower_bound(wins, losses, a = 0.05):
    n = wins + losses
    if n == 0:
        return 0
    z = st.norm.ppf(1 - (1 - a) / 2)
    phat = 1.0 * wins / n
    lower = (phat - z * z / (2 * n) + z * math.sqrt( (phat*(1 - phat) + z /(4*n))/ n ))/(1 + z*z/n)
    return lower

我有一个 A 人与 B 人的拳击数据集,其中我有 A 人和 B 人的赢/输。我想用于该函数的参数是:

data['won_A'] #wins
data['lost_A'] #losses

我想创建一个名为 data['lower_bound_a'] 的新列,使用以下行对上述函数使用 apply。

data['lower_bound_a'] =data.apply(ci_lower_bound, wins = 'won_A', losses = 'lost_A')

但是,当我尝试上面的代码时,我收到以下错误消息:

TypeError: ("ci_lower_bound() got multiple values for argument 'wins'", 'occurred at index age_A')

【问题讨论】:

data.apply(lambda x: ci_lower_bound(x['won_A'], x['lost_A'])) 【参考方案1】:

也许是这样的:

data['lower_bound_a']=data.apply(lambda x: ci_lower_bound(x['won_A'], x['lost_A']),axis=1)
print(data)

【讨论】:

以上是关于将具有多个参数的函数应用于多列以创建新列[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将函数应用于DataFrame并创建新列[重复]

将多列作为参数传递给函数,并从函数中为python中的数据框获取新列

将函数应用于两列并将输出映射到新列[重复]

Pandas列表的列,通过迭代(选择)三列的每个列表元素作为新列和行来创建多列[重复]

在 Postgresql 中创建一个具有多列作为参数的函数

如何在工作表中动态创建具有列数的数组,以删除多列中的重复项