сохранить случайное наименьшее значение на строку в наборе данных Python Pandas - PullRequest
1 голос
/ 20 марта 2019

У меня есть фрейм данных, где каждая строка ранжируется по нескольким атрибутам по сравнению со всеми остальными строками.Одна строка может иметь одинаковый ранг в 2 атрибутах (то есть строка может быть лучшей в нескольких атрибутах), как показано в строках 2 и 3 ниже:

     att_1  att_2  att_3 att_4
ID   
984   5       3      1     46
794   1       1      99    34
6471  20      2      3     2

Для каждой строки я хочу сохранить индекс(ID) и ячейка с наименьшим значением - в случае, если имеется более 1 ячейки, мне нужно выбрать случайную ячейку, чтобы сохранить нормальное распределение.

Мне удалось преобразовать df в массив numpy ивыполните следующее:

idx = np.argmin(h_data.values, axis=1)

Но я получаю первую строку каждый раз ..

Желаемый вывод:

ID   MIN
984   att_3
794   att_2
6471  att_1

Спасибо!

Ответы [ 2 ]

1 голос
/ 20 марта 2019

Если вы хотите что-то сделать для каждой строки (или столбца), вам следует попробовать метод .apply

df.apply(np.argmin, axis=1) #row wise
df.apply(np.argmin, axis=0) #column wise
1 голос
/ 20 марта 2019

Использовать понимание списка с numpy.random.choice:

df['MIN'] = [np.random.choice(df.columns[x == x.min()], 1)[0] for x in df.values]
print (df)
      att_1  att_2  att_3  att_4    MIN
ID                                     
984       5      3      1     46  att_3
794       1      1     99     34  att_1
6471     20      2      3      2  att_2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...