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

时间:2018-07-26 01:08:07

标签: python pandas

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

使用的包裹:

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

以下函数用于计算Wilson得分置信区间的下限:

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

我想使用下面一行在上述函数上应用Apply,创建一个名为data ['lower_bound_a']的新列。

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')

1 个答案:

答案 0 :(得分:0)

也许是这样:

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