Идентификация столбца с первым значением в строке на основе условия

#python #pandas #dataframe

#python #pandas #фрейм данных

Вопрос:

У меня есть dataframe, где я хочу идентифицировать столбец для каждой строки, который имеет первое значение, соответствующее условию. В этом случае ниже я хочу создать новый столбец, который идентифицирует первое значение в каждой строке, которое меньше или равно 1, и дает мне соответствующее имя столбца.

 df = pd.DataFrame({'A': [1.5,2,4,0.5], 'B' : [2,1,3,0.25], 'C': [3,1,1,1], 'D': [2,2,3,1]})
df
    A    B      C   D
0   1.5  2.00   3   2
1   2.0  1.00   1   2
2   4.0  3.00   1   3
3   0.5  0.25   1   1
  

Я могу создать маску для проверки условия.

 temp = df<=1
temp
    A       B       C       D
0   False   False   False   False
1   False   True    True    False
2   False   False   True    False
3   True    True    True    True
  

Затем я могу использовать следующее для определения столбцов.

 df['New_col'] = temp.idxmax(axis = 1)
df
    A    B      C   D   New_col
0   1.5  2.00   3   2   A
1   2.0  1.00   1   2   B
2   4.0  3.00   1   3   C
3   0.5  0.25   1   1   A
  

Код правильно идентифицирует столбцы в New_col, за исключением строки 0, поскольку все значения в строке 0 больше 1.
Как я могу получить NaN вместо A для строки 0 в New_col?

Ниже приведен желаемый результат.

     A    B      C   D   New_col
0   1.5  2.00   3   2   NaN
1   2.0  1.00   1   2   B
2   4.0  3.00   1   3   C
3   0.5  0.25   1   1   A
  

Спасибо.

Ответ №1:

Используется any(1) для проверки наличия a True в строках и where для маскирования:

 df['New_col'] = temp.idxmax(axis = 1).where(temp.any(1))
  

Вывод:

      A     B  C  D New_col
0  1.5  2.00  3  2     NaN
1  2.0  1.00  1  2       B
2  4.0  3.00  1  3       C
3  0.5  0.25  1  1       A