所以我有一个数据框。我提取了所有重要的数字列,并将它们存储在error: expected 'lsl' or 'sxtx' with optional shift of #0 or #3
(这是一个列表)中。
然后,我要针对模型对这些每本Bookies应用kelly准则(如下定义):
LSL x4, x4, #2 // multiply index by 4 for 32-bit int
LDR x0, [SP, x4] // Load to x0, (arr[index]) for return;
这就是我尝试应用的方式:
bookies
这是我得到的错误:
def kelly_criterion(bookie_odds, model):
kelly = (((bookie_odds-1) * model ) - (1-model)) / (bookie_odds-1)
return kelly
我正在使用的所有列都是float64类型。
答案 0 :(得分:4)
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
答案 1 :(得分:2)
在这种情况下,看起来好像不需要使用apply,因为函数可以接收并返回相同形状的Series。在对单个元素执行操作时,应用可能更适合,但看起来像这样向量化:
for bookie in bookies:
df[bookie + "_kelly"] = kelly_criterion(df[bookie],df["win"])