NaNs в Pandas кадре данных после операций с несколькими индексами по столбцам - PullRequest
0 голосов
/ 21 апреля 2020

Мне нужна помощь в понимании результатов ниже. Почему я получаю NaN для df.loc [1, 'c2']? Поскольку я не получаю ошибку такого же типа, когда существует только один индекс, это должно быть как-то связано с не указанием второго уровня мультииндекса в расчете, но у меня возникают проблемы с определением точной проблемы , Почему это работает только когда я использую .values?

df = pd.DataFrame({'i': [1,1,2,2], 'i2':[1,2,1,2], 'a':[10,20,30,40], 'b':[100,100,300,400]})

df = df.set_index('i')

df.loc[1, 'c1'] = df.loc[1, 'a'] / df.loc[1, 'b']                #Works

df = df.reset_index()
df = df.set_index(['i', 'i2'])

df.loc[1, 'c2'] = df.loc[1, 'a'] / df.loc[1, 'b']                #Fails (NaN)

df.loc[1, 'c2'].index.equals(df.loc[1, 'a'].index)               #True
df.loc[1, 'c2'].index.equals(df.loc[1, 'b'].index)               #True

df.loc[1, 'c3'] = df.loc[1, 'a'].values / df.loc[1, 'b'].values  #Works
df.loc[1, 'c4'] = (df.loc[1, 'a'] / df.loc[1, 'b']).values       #Works

1 Ответ

0 голосов
/ 21 апреля 2020

Я недостаточно знаком с pandas 'индексированием внутренних устройств, чтобы сказать, почему он работает так, как есть. Я могу подтвердить, что вижу такое же поведение.

Это всего лишь догадка, но, возможно, дело в том, что использование скаляра 1 в качестве значения индекса немного неоднозначно. Использование диапазона / среза, похоже, решает проблему, поэтому, возможно, это поможет pandas разрешить эту двусмысленность? Опять же, это просто догадка.

df.loc[1:1, 'c1'] = df.loc[1:1, 'a'] / df.loc[1:1, 'b']
...