Предположим, я создаю мультииндексный фрейм данных, например, так:
import pandas as pd
date_index = pd.date_range(start='1/1/2019', end='1/3/2019')
symbol_index = ['AAPL','BOA','GE','MSFT']
idx = pd.MultiIndex.from_product([date_index, symbol_index], names=['Date', 'Symbol'])
col = ['val_to_change','new_val']
data = pd.DataFrame(index=idx,columns=col)
Я хочу сделать несколько вычислений строка за строкой, например:
initial_variable = 0
def calc(row):
global initial_variable
row['val_to_change'] = initial_variable
#I make further calculations here with row['val_to_change']
row['new_val'] = row['val_to_change'] + 500
initial_variable = row['new_val'].values
return row
data = data.groupby('Date').apply(calc)
Это даст мне желаемый результат:
val_to_change new_val
Date Symbol
2019-01-01 AAPL 0 500
BOA 0 500
GE 0 500
MSFT 0 500
2019-01-02 AAPL 500 1000
BOA 500 1000
GE 500 1000
MSFT 500 1000
2019-01-03 AAPL 1000 1500
BOA 1000 1500
GE 1000 1500
MSFT 1000 1500
Однако, если в кадре данных нет одинакового количества индекса уровня Symbol
для каждого индекса Date
, я получаю сообщение об ошибке для вышеуказанной функции.Если я опускаю Symbol
из Date
:
data.drop(('2019-01-01','AAPL'),inplace=True)
, а теперь применяю ту же функцию к data
, тогда я получаю ошибку:
ValueError: Length of values does not match length of index
, потому чтоПервый индекс Date
имеет только 3 Symbol
индекса.Как я могу преодолеть эту проблему?Я хочу применить такую функцию к моему фрейму данных, который имеет мультииндекс, но мультииндекс не имеет одинаковое количество Symbol
индекса для каждого Date
индекса.