Рассчитать балл на основе веса в Pandas DataFrame - PullRequest
2 голосов
/ 02 июня 2019

Идея состоит в том, чтобы отсортировать строки на основе значений, чтобы строка с максимальными 1 с получила максимальный результат, который я буду использовать позже для sort_values с ascending=False ... Это также называется взвешенной суммой ...

Фрейм данных выглядит следующим образом:

    ID  SINNOUVEAU  PERTETOTAL  CHANGGARAN  SOCLOCATIO  SINISAMEDI  NOMASCONDU   INIREPET
0    1           1           1           0           0           0           1          0
1    1           0           1           0           0           0           1          0
2    1           1           0           1           0           0           1          0
0    2           1           1           1           0           0           1          0
1    2           0           1           0           0           0           1          0
2    2           1           0           1           0           0           1          0

Все веса равны 1, за исключением CHANGGARAN, который будет установлен на 2.

Это пример первой строки для подсчета очков: 1x1 + 1x1 + 0x2 + 0x1 + 0x1 + 1x1 + 0x1=3

В конце это ожидаемые результаты перед сортировкой:

    ID  SINNOUVEAU  PERTETOTAL  CHANGGARAN  SOCLOCATIO  SINISAMEDI  NOMASCONDU   INIREPET  SCORE
0    1           1           1           0           0           0           1          0  3
1    1           0           1           0           0           0           1          0  2
2    1           1           0           1           0           0           1          0  4
0    2           1           1           1           0           0           1          0  5
1    2           0           1           0           0           0           1          0  2
2    2           1           0           1           0           0           1          0  4

Спасибо!

Ответы [ 2 ]

3 голосов
/ 02 июня 2019

Используйте replace для определенного столбца, затем вычислите сумму по столбцам.

# Drop "ID" first because it is not a part of the sum
df.replace({'CHANGGARAN': {1: 2}}).drop('ID', 1).sum(axis=1)

0    3
1    2
2    4
0    5
1    2
2    4
dtype: int64

Переназначить результат в столбец, а затем использовать его для сортировки кадра данных:

df['SCORE'] = df.replace({'CHANGGARAN': {1: 2}}).drop('ID', 1).sum(axis=1)
df_sorted = df.sort_values('SCORE')
2 голосов
/ 02 июня 2019

Я чувствую, что мы можем использовать dot здесь

a=np.ones(df.shape[1])
a[0]=0
a[3]=2
df.dot(a)
0    3.0
1    2.0
2    4.0
0    5.0
1    2.0
2    4.0
dtype: float64
#df['SCORE']=df.dot(a)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...