Python Numpy: как назначить два результата, если выполняется условие np.where?

#python #pandas #numpy #dataframe #debugging

#python #pandas #numpy #фрейм данных #отладка

Вопрос:

Объясненный ввод: получен фрейм данных df

 Category    Location    Min     Space
AA          Y           0.25    0.25
BB          Y           0.25    1
CC                      0.5     0.625
  

Сценарий:
Необходимо вычислить Reduced_Space для расположенной категории 'Y' с loc_perc помощью, но если Reduced_Space меньше, чем Min нужно сохранить то же Space , что и в оригинале, и обновить Location столбец для этой категории до ‘ ‘.

Ожидаемый результат:

 Category    Location    Min     Space   Reduced_Space   
AA                      0.25    0.25    0.25
BB          Y           0.25    1       0.5
CC                      0.5     0.625   0.625
  

Пробный код:
Не уверен, как присвоить два значения, если условие удовлетворяет np.where . Использовал ‘и’ в качестве соединителя, но выдает ошибку, например, ключевые слова здесь не могут быть использованы.

 loc_perc = 0.5

dfNew = df.assign(
    temp=lambda x: x.Space,
    Reduced_Space=lambda x: np.where(x.Location == "Y", 
                            np.where((x.Space * dual_loc_perc) < x.Min, x.Space and x.Dual_Location ='', x.Space * dual_loc_perc)
                            , x.Space),  
).drop("temp", 1)
  

Нужна помощь! Заранее благодарю!

Ответ №1:

Я думаю, вам нужно обрабатывать каждый столбец отдельно, здесь можно связать оба условия amp; побитово AND :

 dual_loc_perc = 0.5

m1 = df.Location == "Y"
m2 = (df.Space * dual_loc_perc) < df.Min

df['Reduced_Space'] = np.where(m1 amp; m2, df.Space, df.Space * dual_loc_perc) 

df.loc[m1 amp; m2, 'Location'] = ''
print (df)
  Category Location   Min  Space  Reduced_Space
0       AA           0.25  0.250         0.2500
1       BB        Y  0.25  1.000         0.5000
2       CC           0.50  0.625         0.3125