Как рассчитать среднее место индекса для каждого элемента

#python #pandas

#python #панды

Вопрос:

Я пытаюсь оценить средний ранг элементов по нескольким категориям в pandas dataframe, но не знаю, как это сделать

Допустим, у нас есть следующий фрейм данных, который оценивает элементы в разных категориях. Элементы уже отсортированы по убыванию оценки элемента в каждом столбце.

 Index Safety Performance Capability

  0   item_1   item_3      item_1
  1   item_3   item_2      item_2
  2   item_4   item_1      item_3
  3   item_2   item_4      item_4
  

Что мне нужно, так это общий рейтинг элементов на основе их индексов во всех категориях, поэтому в целом в этом случае будет выглядеть примерно так:

 Total

item_1
item_3
item_2
item_4
  

Комментарии:

1. Вам нужно определить вес здесь

2. вес — это индекс

Ответ №1:

Если вес index используется melt groupby с mean индексом

 s=df.reset_index().melt('Index').groupby('value')['Index'].mean().sort_values()
s
Out[14]: 
value
item_1    0.666667
item_3    1.000000
item_2    1.666667
item_4    2.666667
Name: Index, dtype: float64
df['Total']=s.index
  

Ответ №2:

Другой вариант с stack groupby sum (также можно использовать mean как wen)

 df.set_index('Index').stack().reset_index().groupby(0).Index.sum().sort_values()
  

Выводит

 item_1    2
item_3    3
item_2    5
item_4    8
Name: Index, dtype: int64