У меня есть фрейм данных pandas, и если значение в столбце XNodes равно 1, мне нужно выполнить расчет для заполнения нового столбца PMNode2, иначе (значение 0) мне нужно выполнить другой расчет для заполнения PMNode2.
Я применил следующий оператор where. Это работает для 0, но для 1 в столбце возвращается NaN. Для оператора XNodes == я пытался использовать 1, 1.0, '1.0' . Тип данных — float64 для всех задействованных столбцов. Есть ли что-то явно не так с тем, как я это сделал. Или я должен вместо этого применять оператор if? мне там не очень повезло. Спасибо
Nodes_2['PMNode2'] =(((Nodes_2['PMNode'] *.75) + (Nodes_2['IntitFlow'] *.25)).where(cond=Nodes_2['XNodes']=='1.0'))
Nodes_2['PMNode2'] =((Nodes_2['PMNode'] *.75).where(cond=Nodes_2['XNodes']==0))
Можете ли вы использовать следующий оператор для условного назначения фрейма данных?
df.loc[df.A==xx, 'B'] = yy
Итак, в вашем случае:
Nodes_2.loc[Nodes_2['XNodes']==0, 'PMNode2'] = something
Nodes_2.loc[Nodes_2['XNodes']==1, 'PMNode2'] = something
Спасибо @Jinbo, да, я так и сделал, и это сработало: Nodes_2.loc[Nodes_2.XNodes==1, 'PMNode2']=((Nodes_2['PMNode'] *.75) + (Nodes_2['IntitFlow'] *.25)) Nodes_2.loc[Nodes_2.XNodes==0, 'PMNode2']=(Nodes_2['PMNode'] *.75)