Создать один столбец, используя значения из нескольких столбцов - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь создать новый столбец во фрейме данных Pandas на основе значений из трех столбцов, если значение для каждого столбца ['A', 'B', 'C'] больше 5, чем output = 1и output = 0, если в одном из столбцов ['A', 'B', 'C'] есть какое-либо значение, которое меньше 5. Кадр данных выглядит следующим образом:

A   B   C
5   8   6
9   2   1
6   0   0
2   2   6
0   1   2
5   8   10  
5   5   1
9   5   6

Ожидаетсявывод:

A   B   C    new_column
5   8   6    1
9   2   1    0
6   0   0    0   
2   2   6    0
0   1   2    0
5   8   10   1
5   5   1    0
9   5   6    1

Я пытался использовать этот код, но он не дает мне желаемый вывод:

conditions = [(df['A'] >= 5) , (df['B'] >= 5) , (df['C'] >= 5)]
choices = [1,1,1]
df['new_colum'] = np.select(conditions, choices, default=0)

1 Ответ

0 голосов
/ 23 января 2019

Вам нужны цепные условия на & для bitwise AND:

conditions = (df['A'] >= 5) & (df['B'] >= 5) & (df['C'] >= 5)

Или используйте DataFrame.all для проверки, все ли значения в строке True s:

conditions = (df[['A','B','C']] >= 5 ).all(axis=1)
#if need all columns >=5
conditions = (df >= 5 ).all(axis=1)

А затем преобразовать маску в целое число для True, False в 1, 0:

df['new_colum'] = conditions.astype(int)

Или используйте numpy.where:

df['new_colum'] = np.where(conditions, 1, 0)

print (df)
   A  B   C  new_colum
0  5  8   6          1
1  9  2   1          0
2  6  0   0          0
3  2  2   6          0
4  0  1   2          0
5  5  8  10          1
6  5  5   1          0
7  9  5   6          1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...