Как обновить данные столбца на основе нескольких условий в других столбцах? - PullRequest
0 голосов
/ 02 октября 2018

У меня есть фрейм данных:

Color   Name    Age   City   Value
Blue    Bob     28    Atl    0
Green   Bob     27    Chi    0
Blue    Sam     28    Atl    0

У меня вышеупомянутый DF, и я хочу, чтобы все значения были равны 1, если цвет синий, возраст 28, а город Atl.

Я попытался использовать df.loc, но получил сообщение об ошибке «слишком много индексаторов»

Ответы [ 3 ]

0 голосов
/ 02 октября 2018

Для этих проблем я обычно устанавливаю значение по умолчанию np.select, чтобы я мог создавать сложные условия и настраивать выходные данные в понятной и расширяемой форме.

Сначала создайте свои условия (Создайте как можно большеэто как вы хотите):

p1 = df.Color.eq('Blue')
p2 = df.Age.eq(28)
p3 = df.City.eq('Atl')

condition = p1 & p2 & p3

Теперь, используя numpy.select, передавайте список ваших условий, список подходящих результатов и значение по умолчанию:

df.assign(Value=np.select([condition], [1], df.Value))

   Color Name  Age City  Value
0   Blue  Bob   28  Atl      1
1  Green  Bob   27  Chi      0
2   Blue  Sam   28  Atl      1

Если у вас действительно есть только одно условие, вы также можете использовать numpy.where здесь:

np.where(condition, 1, df.Value)
# array([1, 0, 1], dtype=int64)
0 голосов
/ 10 октября 2018

Вы можете использовать np.where с несколькими условными выражениями.Если у вас есть исходный фрейм данных, вы можете выполнить следующий код

import numpy as np
df['value'] = np.where((df['Color'] == 'Blue') & (df['Age'] == 28) & (df['City'] == 'Atl'), 1, 0)

, чтобы получить

Color  Name  Age  City  Value
Blue   Bob   28   Atl     1
Green  Bob   27   Chi     0
Blue   Sam   28   Atl     1

Очевидно, что вы можете изменять условия по мере необходимости / необходимости или даже создавать дополнительные столбцы, используята же техника.

0 голосов
/ 02 октября 2018

Это будет работать

df.loc[(df.Color=='Blue')&(df.Age==28)&(df.City=='Atl'),'Value']=1
df
Out[687]: 
   Color Name  Age City  Value
0   Blue  Bob   28  Atl      1
1  Green  Bob   27  Chi      0
2   Blue  Sam   28  Atl      1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...