Python中文
首页
教程
问答
标签
搜索
登录
注册
Kelly标准应用程序python的逻辑问题(使用最后一行值),pandas
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我在尝试使用python构建带有kelly标准的模型时遇到了一个逻辑问题。我需要从函数的前一行(单元格)中使用一个值,但是,当我尝试将函数应用于整个df时,前一行(单元格)是索引行</p> <p>下面是代码和输出的示例:</p> <pre><code>import pandas as pd import numpy as np data = {'Probability':[0.3,0.4,0.5], 'Odds':[5,1,4] ,'Cap':[1000,'','']} df = pd.DataFrame(data) P = df.Probability / 1 B = df.Odds Q = 1 - P df['Kelly'] = ((B * P - Q)/B) df['Invest'] = df.Kelly * df.Cap df.loc[df['Invest'] < 0, 'Invest'] = 0 df['Net'] = df.Odds * df.Invest df['Total'] = df.Cap + df.Net </code></pre> <p>原始DF</p> <pre> +---+-------------+------+------+--------+--------+--------+--------+ | | Probability | Odds | Cap | Kelly | Invest | Net | Total | +---+-------------+------+------+--------+--------+--------+--------+ | 0 | 0.3 | 5 | 1000 | 0.160 | 160.0 | 800.0 | 1800.0 | | 1 | 0.4 | 1 | | -0.200 | 0.0 | 0.0 | 0.0 | | 2 | 0.5 | 4 | | 0.375 | 0.0 | 0.0 | 0.0 | +---+-------------+------+------+--------+--------+--------+--------+ </pre> <p>我试图达到的结果的DF: 其中,Cap(资本)更新为前一行的总计:</p> <pre> +---+-------------+------+------+--------+--------+--------+--------+ | | Probability | Odds | Cap | Kelly | Invest | Net | Total | +---+-------------+------+------+--------+--------+--------+--------+ | 0 | 0.3 | 5 | 1000 | 0.160 | 160.0 | 800.0 | 1800.0 | | 1 | 0.4 | 1 | 1800 | -0.200 | 0.0 | 0.0 | 1800.0 | | 2 | 0.5 | 4 | 1800 | 0.375 | 675.0 | 2700.0 | 4500.0 | +---+-------------+------+------+--------+--------+--------+--------+ </pre> <p>综上所述,第一行1000的上限为初始资本,总计为净值+上限之和。因此,在第一次迭代之后,下面的Cap将是前一行的总和</p> <p>我尝试使用shift(-1),但是,第一行无法从最后一行中找到总计,因为最后一行是索引行</p> <p>多谢各位</p> <p>我已经尝试按照@Daniel Geffen的建议添加shift,但是,我无法解决这个问题。我是把代码放错了顺序还是遗漏了什么? 这是修改后的代码:</p> <pre><code>P = df.Probability / 1 B = df.Odds Q = 1 - P df['Kelly'] = ((B * P - Q)/B) df["Total"] = np.nan df['Cap'] = df.Total.shift(1, fill_value=1000) df['Invest'] = df.Kelly * df.Cap df.loc[df['Invest'] < 0, 'Net'] = 0 df['Net'] = df.Odds * df.Invest df['Total'] = df.Cap + df.Net df = df[['Probability', 'Odds','Cap','Kelly','Invest', 'Net', 'Total']] </code></pre> <p>这是更改代码后的结果:</p> <pre> ╔═══╦═════════════╦══════╦════════╦════════╦════════╦═══════╦════════╗ ║ ║ Probability ║ Odds ║ Cap ║ Kelly ║ Invest ║ Net ║ Total ║ ╠═══╬═════════════╬══════╬════════╬════════╬════════╬═══════╬════════╣ ║ 0 ║ 0.3 ║ 5 ║ 1000.0 ║ 0.160 ║ 160.0 ║ 800.0 ║ 1800.0 ║ ║ 1 ║ 0.4 ║ 1 ║ NaN ║ -0.200 ║ NaN ║ NaN ║ NaN ║ ║ 2 ║ 0.5 ║ 4 ║ NaN ║ 0.375 ║ NaN ║ NaN ║ NaN ║ ╚═══╩═════════════╩══════╩════════╩════════╩════════╩═══════╩════════╝ </pre>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>似乎应该使用<code>shift(1)</code>从上一行获取值。使用<code>fill_value</code>参数可以用初始值填充第一行:</p> <pre><code>df['Cap'] = df.Total.shift(1, fill_value=1000) </code></pre>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
尽管Python中的所有内容都是引用,为什么Python导师在没有指针的列表中绘制字符串和整数?
8 回答
尽管python中的表达式为false,但循环仍在运行
1 回答
尽管python代码正确,但从nifi ExecuteScript处理器获取语法错误
10 回答
尽管Python在Neovim中工作得很好,但插件不能识别Neovim中的Python主机
10 回答
尽管python字典包含了大量的条目,但它并没有增长
10 回答
尽管python说模块存在,为什么我会得到这个消息?
6 回答
尽管setuptools和控制盘是最新的,但无法识别singleversionexternallymanaged
3 回答
尽管stdout和stderr重定向,但未捕获错误消息
10 回答
尽管Tensorboard的事件太大,但Tensorboard的步骤太少了
10 回答
尽管tkinter上的变量已更改,但显示未更改
4 回答
尽管try/except使用Python进行单元测试时出现断言错误
9 回答
尽管URL是sam,但仍会抛出“达到最大重定向”
10 回答
尽管url有效,Pandas仍读取url的\u csv错误
7 回答
尽管while中存在时间延迟,但LINUX线程的CPU利用率为100%(1)
10 回答
尽管x0在范围内,Scipy优化仍会引发ValueError
1 回答
尽管xpath正确,但使用selenium单击链接仍不起作用
10 回答
尽管下载了ffmpeg并设置了路径变量python,但没有后端错误
4 回答
尽管下载了i,但找不到型号“fr”
4 回答
尽管下载了plotnine包,但未获取名为“plotnine”的模块时出错
10 回答
尽管为所有行指定了权重,网格(0)仍不起作用
2 回答