Получить заголовок dataframe, если значение ниже порогового значения, иначе поставить 'noise' - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть pandas dataframe, как показано ниже:

speaker  Scarlett Johanson  Mark Ruffalo  Chris Evans
0                 0.790857      1.044091     0.984198
1                 0.895030      0.672590     1.072131
2                 0.925493      0.078618     0.800736
3                 0.296032      0.550027     0.978062
4                 0.669364      0.499356     0.940024

Так что я пытаюсь достичь, если минимальный ряд по строке больше порогового значения, скажем, 0,3 Я хочу значение как «шум», в противном случае яв качестве значения нужно указать имя столбца.

Например: 0-я строка -> мин равен 0,7, что больше 0,3, поэтому noise

2-я строка -> мин составляет 0,07, что меньшечем 0,3, поэтому значение должно быть Mark Ruffalo.

Я пытаюсь получить это в новом столбце, скажем 'Final Result'.

Я пробовал что-то вроде этого:

d['final'] = np.where(d.min(axis=1) >= 0.3, 'noise', 'no_noise') 

но не понимает, как заменить текст 'no_noise' на column_header.Заранее спасибо за помощь.

1 Ответ

0 голосов
/ 30 ноября 2018

Решение 1: df.idxmin:

Найдите минимальный индекс, используя idxmin, который возвращает индекс первого вхождения минимума по запрошенномуось

# set speaker as index so it's out of the way
df.set_index('speaker', inplace=True)
# set your threshold
thresh = 0.3
# use np.where with `df.idxmin` as the other
df['final'] = np.where(df.min(1) > thresh, 'noise', df.idxmin(1))

>>> df
         Scarlett Johanson  Mark Ruffalo  Chris Evans              final
speaker                                                                 
0                 0.790857      1.044091     0.984198              noise
1                 0.895030      0.672590     1.072131              noise
2                 0.925493      0.078618     0.800736       Mark Ruffalo
3                 0.296032      0.550027     0.978062  Scarlett Johanson
4                 0.669364      0.499356     0.940024              noise

решение 2: np.argmin Вы можете использовать np.argmin, чтобы найти минимальное значение и индексировать имена столбцов порезультат этого в вашем звонке на np.where:

# set speaker as index so it's out of the way
df.set_index('speaker', inplace=True)   
# set your threshold
thresh = 0.3
# use np.where and np.argmin:
df['final'] = np.where(df.min(1) > thresh, 'noise', df.columns[np.argmin(df.values,1)])

>>> df
         Scarlett Johanson  Mark Ruffalo  Chris Evans              final
speaker                                                                 
0                 0.790857      1.044091     0.984198              noise
1                 0.895030      0.672590     1.072131              noise
2                 0.925493      0.078618     0.800736       Mark Ruffalo
3                 0.296032      0.550027     0.978062  Scarlett Johanson
4                 0.669364      0.499356     0.940024              noise
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...