pandas 数据框中的循环依赖

Rus*_*ssH 5 python python-2.7 pandas

以下代码对硬币翻转结果进行投注。您从 \xc2\xa3100 开始,每次翻转的风险为 5%,但由于我的代码根据您的起始余额计算赌注大小,因此赌注始终为 \xc2\xa35。

\n\n
import pandas\nimport matplotlib.pyplot as plt\n\nstart_bal = 100.0 #start off with \xc2\xa3100\nrisk = 0.05 # risk 5% on each bet\n\n#create an empty data frame.\na = pandas.DataFrame()\n\n#create a list of coin toss results, 1 is win, -1 is lose\na['Result'] = [1,1,1,1,-1,-1,1,1,1,-1,-1,1,1,-1,-1,-1,1,1]\n\n#your bet size is a % of your starting balance\na['bet'] = start_bal*risk\n#record profit or loss based on coin toss\na['pnl'] = a.Result * a.bet\n#increase/decrease balance\na['bal'] = start_bal + a.pnl.cumsum()\n\n#plot balance\nplt.plot(a.bal)\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想做的是在每次下注后根据您当时的余额重新计算下注大小,这样当您的余额增加时您下注更多,当余额减少时您下注更少。这意味着“bal”取决于“bet”,而“bet”又取决于“bal”,所以我最终得到了循环关系。

\n\n

这可以吗?我是否需要一次一行地迭代数据帧,重新计算该特定索引处的“bal”和“bet”?

\n\n

谢谢。

\n

Ale*_*der 4

一个简单的单衬:

results = start_bal * (1 + risk * a.Result).cumprod()
>>> results
0     105.000000
1     110.250000
2     115.762500
3     121.550625
4     115.473094
5     109.699439
6     115.184411
7     120.943632
8     126.990813
9     120.641272
10    114.609209
11    120.339669
12    126.356653
13    120.038820
14    114.036879
15    108.335035
16    113.751787
17    119.439376
Name: Result, dtype: float64

results.plot()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述