#python #pandas
#python #pandas
Вопрос:
Как я могу выполнить скользящую сумму столбца Trade_Cost
, когда столбец Buy(C)/Sell(V)
находится C
, и сбрасывать эту сумму каждый раз Current_Qntd
при попадании 0
, а затем начинать новую скользящую сумму до следующего нуля?
Buy(C)/Sell(V) Qntd Price Current_Qntd Trade_Cost
0 C 33000 103.980000 33000 3.431340e 06
1 C 3682 102.940000 36682 3.790251e 05
2 C 108 103.490000 36790 1.117692e 04
3 C 10717 103.500000 47507 1.109210e 06
4 C 6831 103.760000 54338 7.087846e 05
5 C 968 107.000000 55306 1.035760e 05
6 C 32 107.000000 55338 3.424000e 03
7 V 3644 115.618296 51694 4.213131e 05
8 V 4704 115.995689 46990 5.456437e 05
9 V 46990 116.030000 0 5.452250e 06
10 C 35000 116.000000 35000 4.060000e 06
11 C 16000 117.999073 51000 1.887985e 06
12 V 1200 115.274742 49800 1.383297e 05
13 V 1400 116.700036 48400 1.633800e 05
14 V 23855 116.406567 24545 2.776879e 06
15 V 2589 116.247625 21956 3.009651e 05
16 V 12741 115.952801 9215 1.477355e 06
17 V 9132 115.951078 83 1.058865e 06
18 V 83 115.950000 0 9.623850e 03
Редактировать
Мне нужно сгруппировать ее по активу, ниже приведено продолжение вышеупомянутого DF, каждый DF для другого актива
Buy(C)/Sell(V) Qntd Price Current_Qntd Trade_Cost
0 C 100 114.290000 100 11429.000000
1 C 3137 115.020000 3237 360817.740000
2 V 100 114.500000 3137 11450.000000
3 V 1200 114.670000 1937 137604.000000
4 V 1937 115.000000 0 222755.000000
5 C 5586 96.790000 5586 540668.940000
6 V 5586 116.590000 0 651271.740000
7 C 971 118.630000 971 115189.730000
8 V 971 129.800000 0 126035.800000
9 C 600 126.416417 600 75849.850002
Ответ №1:
IIUC, попробуйте это:
grp = (df['Current_Qntd'] == 0).cumsum()
df['Trade_Cost Sum'] = df['Trade_Cost'].mask(df['Buy(C)/Sell(V)'] != 'C', 0)
df['Trade_Cost Sum'] = df.groupby(grp)['Trade_Cost Sum'].cumsum()
df
Вывод:
Buy(C)/Sell(V) Qntd Price Current_Qntd Trade_Cost Trade_Cost Sum
0 C 33000 103.980000 33000 3431340.00 3431340.00
1 C 3682 102.940000 36682 379025.10 3810365.10
2 C 108 103.490000 36790 11176.92 3821542.02
3 C 10717 103.500000 47507 1109210.00 4930752.02
4 C 6831 103.760000 54338 708784.60 5639536.62
5 C 968 107.000000 55306 103576.00 5743112.62
6 C 32 107.000000 55338 3424.00 5746536.62
7 V 3644 115.618296 51694 421313.10 5746536.62
8 V 4704 115.995689 46990 545643.70 5746536.62
9 V 46990 116.030000 0 5452250.00 0.00
10 C 35000 116.000000 35000 4060000.00 4060000.00
11 C 16000 117.999073 51000 1887985.00 5947985.00
12 V 1200 115.274742 49800 138329.70 5947985.00
13 V 1400 116.700036 48400 163380.00 5947985.00
14 V 23855 116.406567 24545 2776879.00 5947985.00
15 V 2589 116.247625 21956 300965.10 5947985.00
16 V 12741 115.952801 9215 1477355.00 5947985.00
17 V 9132 115.951078 83 1058865.00 5947985.00
18 V 83 115.950000 0 9623.85 0.00
Комментарии:
1. Это работает очень хорошо, но мне нужно запросить другую переменную, то есть сгруппировать по имени актива в столбце «Актив», которого нет в вопросе выше.
2. Я редактировал с другим DF