У меня есть датафрейм со следующей структурой.Чего я хочу добиться, так это сгруппировать фрейм данных по уровню первичного индекса (TCKRA
и TCKRB
), а затем в каждом из них применить функцию, которая вычислит ASK - BID
и выведет только два столбца для каждого уровня.
df = pd.DataFrame(np.random.rand(10, 4))*100
df.columns = pd.MultiIndex.from_tuples([('TCKR_A', 'BID'), ('TCKR_A', 'ASK'),
('TCKR_B', 'BID'), ('TCKR_B', 'ASK')])
df.columns.names = ['Sec', 'Fld']
df
>> df
Sec TCKR_A TCKR_B
Fld BID ASK BID ASK
0 8.183207 36.627854 51.926086 18.809108
1 79.111061 39.580137 56.137122 41.631460
2 48.757876 11.297864 50.613713 56.089854
3 12.320957 38.624896 81.759719 88.549522
4 8.659632 36.967937 50.086826 20.728593
5 56.019027 77.685117 60.440403 9.726945
6 47.956368 20.087774 31.204852 99.893489
7 21.328761 32.824996 14.175482 13.154170
8 13.344390 90.940015 7.617241 50.501808
9 64.513930 34.020330 50.607016 38.710182
Я пытаюсь избежать использования цикла, хотя тогда это выполнимо, так как я могу применить операцию для каждого первичного уровня.До сих пор я пытался использовать pd.df.groupby()
, но без удачи,
df.groupby('Security', level=0).apply(lambda x: x.ASK - x.BID)
>> AttributeError: 'DataFrame' object has no attribute 'ASK'