我目前有一个返回ACTION的数据框。根据“操作”,它将根据“更改”列中的%变化来增加或减少“平衡”。 如果操作是BH或BC,则BALANCE将按CHANGE列中的%进行更改 B天或SIT天的BALANCE不变 我的数据框当前的示例如下:
import pandas as pd
import numpy as np
df = pd.DataFrame()
df['ACTION'] = ('SIT','BC', 'BH', 'BH', 'BH', 'BH', 'B', 'SIT', 'SIT')
df['CHANGE'] = (0.02, -0.02, 0.17, -0.01, 0.05, -0.02, 0.02, 0.03, 0.01)
df = df[::-1]
conditions = [
df['ACTION'].eq('BC'),
df['ACTION'].eq('BH'),
df['ACTION'].eq('B'),
df['ACTION'].eq('SIT')
]
choices = [df['CHANGE'], df['CHANGE'], 0, 0]
df['GAIN/LOSS'] = np.select(conditions, choices)
df = df[::-1]
df.loc[8, 'BALANCE'] = 100.0000
for i in df.index[::-1][:-1]:
df.loc[i - 1, 'BALANCE'] = df.loc[i, 'BALANCE'] + (df.loc[i, 'BALANCE'] * df.loc[i - 1, 'GAIN/LOSS'])
print(df)
上面的代码将导致以下输出:
ACTION CHANGE GAIN/LOSS BALANCE
0 SIT 0.02 0.00 116.805289
1 BC -0.02 -0.02 116.805289
2 BH 0.17 0.17 119.189070
3 BH -0.01 -0.01 101.871000
4 BH 0.05 0.05 102.900000
5 BH -0.02 -0.02 98.000000
6 B 0.02 0.00 100.000000
7 SIT 0.03 0.00 100.000000
8 SIT 0.01 0.00 100.000000
但是,我正在寻找一些代码,其中BALANCE仅在BC行上更新,并且此行求和是B和BC之后的第一个BH之间发生的净变化 基本上,我希望datatframe如下所示: 在第1行的BALANCE列汇总BC与第一个BH之间的净变化为17%,输出结果如下:
ACTION CHANGE GAIN/LOSS BALANCE
0 SIT 0.02 0.00 117.000000
1 BC -0.02 -0.02 117.000000
2 BH 0.17 0.17 100.000000
3 BH -0.01 -0.01 100.000000
4 BH 0.05 0.05 100.000000
5 BH -0.02 -0.02 100.000000
6 B 0.02 0.00 100.000000
7 SIT 0.03 0.00 100.000000
8 SIT 0.01 0.00 100.000000