假设我有以下数据帧:
import pandas as pd
df = pd.DataFrame()
df['A'] = ('1/05/2019','2/05/2019','3/05/2019','4/05/2019','5/05/2019','6/05/2019','7/05/2019','8/05/2019','9/05/2019','10/05/2019','11/05/2019','12/05/2019','13/05/2019','14/05/2019','15/05/2019','16/05/2019','17/05/2019','18/05/2019','19/05/2019','20/05/2019')
df['B'] = ('SIT','SCLOSE', 'SHODL', 'SHODL', 'SHODL', 'SHODL', 'SHODL', 'SELL','SIT','SIT','BCLOSE', 'BHODL', 'BHODL', 'BHODL', 'BHODL', 'BHODL', 'BHODL','BUY','SIT','SIT')
df['C'] = (0.00,1.00,10.00, 5.00,6.00,-6.00, 6.00, 0.00,0.00,0.00,-8.00,33.00,-15.00,6.00,-1.00,5.00,10.00,0.00,0.00,0.00)
df.loc[19, 'D'] = 100.0000
可以看出,我从最后一行的100开始D列。
我正在尝试为列D编写计算代码,因此从底部行(第19行)开始,当B列上显示买入或卖出时,D列上的数字被锁定(例如100),并用于基于每个SHODL或BHODL的col C的计算,直到显示BCLOSE或SCLOSE之后的行。
锁定的数字用于根据列 C 中的百分比计算运行余额。如您在第 16 行中看到的,C 列的“10”表示 10%。当 100 的 10% = 10 时,新的运行平衡为 110。
第 15 行 C 列有 5%,因此将 5 添加到运行余额中以产生 115。
下一行 14 列 C 具有 -1% 的变化,因为 100 的 1% 是 = 1,因此新的运行余额是 114,依此类推。
以下是运行正确的代码后,应在数据帧的 col D 中返回的结果
df['D'] = ('158.60','158.60', '157.30', '144.30', '137.80', '130.00', '137.80', '130.00','130.00','130.00','130.00', '138.00', '105.00', '120.00', '114.00', '115.00', '110.00','100.00','100.00','100.00')
这种情况一直持续到 SCLOSE 或 BCLOSE 显示为 BCLOSE 或 SCLOSE 行是计算运行余额的最后一行。
如您所见,当显示新的买入或卖出时,此过程将重新启动。
喵喵时光机
慕斯王
红糖糍粑
相关分类