Я хочу суммировать значения для многоуровневого индекса панд данных.Затем я хотел бы добавить это значение к другому значению в совокупности.Затем я хотел бы использовать условный оператор, который зависит от последнего значения этого накопительного списка, для следующего значения индекса того же уровня.
Я смог суммировать значения для многоуровневогоиндекс, но не могу добавить это кумулятивно в список, который я сохранил отдельно.
Вот фрагмент моего фрейма данных.Кодов довольно много, но я чувствую, что необходимо полностью объяснить мою проблему:
import pandas as pd
import numpy as np
balance = [20000]
data = {'EVENT_ID': [112335580,112335580,112335580,112335580,112335580,112335580,112335580,112335580, 112335582,
112335582,112335582,112335582,112335582,112335582,112335582,112335582,112335582,112335582,
112335582,112335582,112335582],
'SELECTION_ID': [6356576,2554439,2503211,6297034,4233251,2522967,5284417,7660920,8112876,7546023,8175276,8145908,
8175274,7300754,8065540,8175275,8106158,8086265,2291406,8065533,8125015],
'BSP': [5.080818565,6.651493872,6.374683435,24.69510797,7.776082305,11.73219964,270.0383021,4,8.294425408,335.3223613,
14.06040142,2.423340019,126.7205863,70.53780982,21.3328554,225.2711962,92.25113066,193.0151362,3.775394142,
95.3786641,17.86333041],
'WIN_LOSE':[0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0],
'INDICATOR': [1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0],
'POT_BET': [2.258394,2.257205,2.255795,2.255495,2.254286,2.250119,2.237375,2.120843,2.256831,2.253802,2.244174,2.232902,
2.226021,2.220088,2.160382,2.143235,2.141063,2.122452,2.095736,2.086548,2.065200],
'LIABILITY': [2.258394,2.257205,12.124184,12.746919,15.275225,24.148729,53.014851,570.587899,2.256831,6.255188,
16.369963,29.162601,37.538122,45.140722,150.228225,195.572610,202.070630,266.835913,402.412997,
467.952670,690.442601]}
df = pd.DataFrame(data, columns=['EVENT_ID','SELECTION_ID','BSP','WIN_LOSE','INDICATOR','POT_BET','LIABILITY'])
df = df.sort_values(["EVENT_ID",'BSP'])
df.set_index(['EVENT_ID', 'SELECTION_ID'], inplace=True)
df['BET'] = np.where(df.groupby(level = 0)['LIABILITY'].transform('sum') < 0.75*balance[-1], df['POT_BET'], 0)
df.loc[(df.INDICATOR == 1) & (df.WIN_LOSE == 1), 'RESULT'] = df['BSP'] * df['BET'] - df['BET']
df.loc[(df.INDICATOR == 1) & (df.WIN_LOSE == 0), 'RESULT'] = - df['BET']
df.loc[(df.INDICATOR == 0) & (df.WIN_LOSE == 0), 'RESULT'] = df['BET']
df.loc[(df.INDICATOR == 0) & (df.WIN_LOSE == 1), 'RESULT'] = -df['BSP'] * df['BET'] + df['BET']
results = df.groupby('EVENT_ID')['RESULT'].sum()
balance.append(results)
Это дает следующий результат для списка баланса:
[20000, EVENT_ID
112335580 23.872099
112335582 -22.304487
Name: RESULT, dtype: float64]
Я ожидаюСписок баланса должен быть:
balance = [20000, 20023.8721, 20001.56761]
Важно отметить, что значение баланса должно меняться для каждой итерации, и это новое значение используется в условном выражении.
Я также не уверен, чтосписок - самый эффективный способ достижения моих целей, но это немного другой вопрос.
Ура, Сэнди