Skip to main content
 首页 » 编程设计

python之将函数应用于数据框

2025年05月04日13zhwl

所以我有一个数据框。我获取所有重要的数字列,并将它们存储在 bookies(这是一个列表)中。

然后我想针对模型对这些博彩公司中的每一个应用凯利标准(定义如下):

def kelly_criterion(bookie_odds, model): 
    kelly = (((bookie_odds-1) * model ) - (1-model)) / (bookie_odds-1) 
    return kelly 

这就是我尝试应用它的方式:

for bookie in bookies: 
    df[bookie + "_kelly"] = df[bookie].apply(kelly_criterion(df[bookie],df["win"])) 

这是我遇到的错误:

TypeError: 'Series' object is not callable 

我使用的所有列都是 float64 类型。

请您参考如下方法:

pd.Series.apply 仅处理一列并传递值。

pd.DataFrame.apply 适用于多列并传递 pd.Series 对象。

如果重新定义函数,您仍然可以使用 pd.Series.apply:

def kelly_criterion(model, bookie_odds): 
    kelly = (((bookie_odds-1) * model ) - (1-model)) / (bookie_odds-1) 
    return kelly 
 
for bookie in bookies: 
    df[f'{bookie}_kelly'] = df['win'].apply(kelly_criterion, bookie_odds=bookie) 

但是,您应该使用矢量化方法来利用 Pandas 框架:

for bookie in bookies: 
    num = (df[bookie] - 1) * df['win'] - 1 + df['win'] 
    denum = df[bookie] - 1 
    df[f'{bookie}_kelly'] = num / denum 

对于完全矢量化:

kellies = [f'{bookie}_kelly' for bookie in bookies] 
 
bookies_sub_1 = df[bookies] - 1 
df[kellies] = (bookies_sub_1 * df['win'] - 1 + df['win']) / bookies_sub_1