Мой фрейм данных выглядит следующим образом
bid_ask.head(6)
Out[3]:
close high low open
timestamp direction
2018-08-16 21:00:00 bid 1.27156 1.27189 1.26899 1.27100
ask 1.27177 1.27270 1.27067 1.27210
volume 1254.00000 1254.00000 1254.00000 1254.00000
2018-08-16 22:00:00 bid 1.27131 1.27154 1.27112 1.27152
ask 1.27152 1.27195 1.27138 1.27173
volume 242.00000 242.00000 242.00000 242.00000
Я пытаюсь выполнить следующую операцию над моим фреймом данных, чтобы добавить строки, используя pd.IndexSlice в качестве аналога случая с простым индексом фрейма данных.
bid_ask.loc[pd.IndexSlice[:, 'mid'], :] = 0.5 * bid_ask.loc[pd.IndexSlice[:, ('bid', 'ask')], :].groupby(level="timestamp").sum()
Однако я получаю следующую ошибку:
KeyError: 'mid'
Похоже, он ожидает, что "mid" будет в кадре данных, а не вставит его.
Я могу достичь желаемого результата, выполнив следующие действия:
for i in bid_ask.index.get_level_values(0):
bid_ask.ix[(i, "mid"), :] = 0.5 * (bid_ask.ix[(i, "bid"), :] +
bid_ask.ix[(i, "ask"), :])
Это занимает значительно больше времени, хотя, особенно, если мой набор данных большой и поэтому нежелателен.
Как мне добиться этого с помощью нарезки иликакая-нибудь другая более быстрая альтернатива?