gpt4 book ai didi

python - 数据帧单元格被锁定并用于运行余额计算,条件是同一行上另一个单元格的结果

转载 作者:行者123 更新时间:2023-12-03 14:42:43 25 4
gpt4 key购买 nike

假设我有以下数据框:

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 列编写计算代码,因此当 B 列显示买入或卖出时,从底部行(第 19 行)开始,然后 D 列上的数字被锁定(例如 100)并用于基于每个 SHODL 或 BHODL 的 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 行是计算运行余额的最后一行。

如您所见,当显示新的 BUY 或 SELL 时,此过程将重新启动。

最佳答案

下一个起始值取决于上一组的最后一个值,所以我认为它不能被向量化。它需要某种迭代过程。我想出了对 groupby 进行迭代的解决方案。反向 df并分配给 df1 .每组工作df1并将最终的组列表分配给原始 df

df1 = df[::-1]
s = df1.B.isin(['BCLOSE','SCLOSE']).shift(fill_value=False).cumsum()
grps = df1.groupby(s)
init_val= 100
l = []
for _, grp in grps:
s = grp.C * 0.01 * init_val
s.iloc[0] = init_val
s = s.cumsum()
init_val = s.iloc[-1]
l.append(s)

df['D'] = pd.concat(l)

Out[50]:
A B C D
0 1/05/2019 SIT 0.0 158.6
1 2/05/2019 SCLOSE 1.0 158.6
2 3/05/2019 SHODL 10.0 157.3
3 4/05/2019 SHODL 5.0 144.3
4 5/05/2019 SHODL 6.0 137.8
5 6/05/2019 SHODL -6.0 130.0
6 7/05/2019 SHODL 6.0 137.8
7 8/05/2019 SELL 0.0 130.0
8 9/05/2019 SIT 0.0 130.0
9 10/05/2019 SIT 0.0 130.0
10 11/05/2019 BCLOSE -8.0 130.0
11 12/05/2019 BHODL 33.0 138.0
12 13/05/2019 BHODL -15.0 105.0
13 14/05/2019 BHODL 6.0 120.0
14 15/05/2019 BHODL -1.0 114.0
15 16/05/2019 BHODL 5.0 115.0
16 17/05/2019 BHODL 10.0 110.0
17 18/05/2019 BUY 0.0 100.0
18 19/05/2019 SIT 0.0 100.0
19 20/05/2019 SIT 0.0 100.0

关于python - 数据帧单元格被锁定并用于运行余额计算,条件是同一行上另一个单元格的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60445075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com