pandas np.where на основе уровня многоиндексности - PullRequest
0 голосов
/ 12 января 2020

У меня есть датафрейм с MultiIndex. Двумя уровнями являются «Nr» и «Price». Можно ли использовать np.where на уровне индекса 1 («Цена») для создания нового столбца («ZZ»)?

'ZZ' следует рассчитывать по столбцу 'first', умноженному на 2, если уровень 1 ('цена') равен 'x'.

import pandas as pd
index = pd.MultiIndex.from_product([['s1', 's2','s3'],['x','y']])
df = pd.DataFrame([1,2,3,4,5,6],index, columns=['first'] )
df.index.names = ['Nr', 'Price']
df

Я пытался:

df['ZZ'] = np.where(df['Price']=='x',df['0']*2,np.nan)

Я получаю:

enter image description here

Спасибо!

1 Ответ

0 голосов
/ 12 января 2020

Вы должны использовать get_level_values

np.where(df.index.get_level_values(1)=='x', df['first']*2, np.nan)
array([ 2., nan,  6., nan, 10., nan])
#df['ZZ'] = np.where(df.index.get_level_values(1)=='x', df['first']*2, np.nan)
...