У меня есть DataFrame
с MultiIndex
:
MultiIndex(levels=[['field1', 'field2'], ['product1','product2','product3']],
codes=[[0, 0, 0, 1, 1, 1], [0, 1, 2]],
names=['metric', 'label'])
Имея import pandas as pd
, я могу ссылаться и использовать:
idx = pd.IndexSlice
data.loc[:,idx['field1',:]].tail()
#and
data.loc[:,idx['field2',:]].tail()
Теперь я немного застрял, когда я думаю о добавлении field3
к моему DataFrame (data
), который я хочу, чтобы быть отношение двух полей:
#This works and gives me the output I'd want:
(data.loc[:,idx['field1']] / (data.loc[:,idx['field2']]))
Но, неясно, как добавить это в мой мультииндекс, как обе эти команды:
data.loc[:,['field3',:]] = quarterly_data.loc[:,idx['accountsreceivable']].div(quarterly_data.loc[:,idx['revenue']]/90)
data.loc[:,['field3']] = quarterly_data.loc[:,idx['accountsreceivable']].div(quarterly_data.loc[:,idx['revenue']]/90)
Не работают. Они дают мне новый level=0
MultiIndex, который является field3
, но level=1
Multi-Index, который применяется только к одному столбцу, где level=1
равен ''
.
Например:
MultiIndex(levels=[['field1', 'field2', 'field3'], ['product1', 'product2','']],...
Теперь, если я укажу:
data.loc[:,idx['field3','product1']] = data.loc[:,idx['field1','product1']]/(data.loc[:,idx['field2','product1']])
Это работает, но только для product1
. Как бы я сделал это для ВСЕХ :
продуктов одновременно? Итерации по всем product{s}
кажутся слишком не- pandas, чтобы быть приемлемым ответом. Я также попытался использовать div
вместо /
, но это не имело значения.