#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