Pandas манипулирование данными - PullRequest
0 голосов
/ 25 марта 2020

У меня есть матрица, где строки - это некоторые номера элементов, столбцы - это оценки для некоторых функций, которые называются Score1, Score2 и т. Д. c Я хочу создать 3 новых столбца с именами out1, out2 и out3; где out1, out2 или out3 получают значение 1 (оценка1), 2 (оценка2) или 3 (оценка3). правила таковы, и, пожалуйста, посмотрите на пример изображения матрицы изображения примера, поскольку мне еще не разрешено публиковать изображения

  1. столбца с самым высоким показателем для предметы могут быть размещены в out1
  2. Если есть связи, но не самые высокие, тогда все ауты оставляются пустыми
  3. , если разница между наивысшим и вторым наивысшим показателем меньше или равный 2, то этот результат помещается в out2
  4. , если между счетом для out2 есть t ie, тогда out2 и out3 будут пустыми
  5. , если разница между 2-м наивысшим оценка и 3-й наивысший балл меньше, чем равно 2, тогда этот балл помещается в out3
  6. , если между баллами для out3 есть t ie, тогда out3 будет пустым

Вот игрушечная матрица

df = pd.DataFrame({'items':['item1', 'item2', 'item3', 'item4', 'item-n'],
                  'score0':[11,2,3,10,10],
                  'score1':[6,4,6,6,9],
                  'score2':[9,8,6,8,8],
                  'score-n':[3,0,2,6,2]})

Спасибо за помощь

1 Ответ

0 голосов
/ 25 марта 2020

Переполнение стека не для решения ваших домашних заданий, а для уточнения деталей. В любом случае, отправной точкой может быть удаление столбца «items» и использование apply для ваших собственных письменных функций:

def my_max(arr1d):
    return np.argmax(arr1d)

dfs = df.drop(["items"], axis=1)
col1 = dfs.apply(my_max, axis=1)

Здесь просто замените argmax вашими собственными функциями.

...