Как мне оценить значения в строке по размеру? - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть такие данные:

|   | name      | time | electoral_not | government_not | political_participation_not | cultur_not | civil_not |
|---|-----------|------|---------------|----------------|-----------------------------|------------|-----------|
| 0 | Iceland   | 2018 | 163           | 162            | 165                         | 166        | 161       |
| 1 | Norway    | 2018 | 160           | 165            | 166                         | 164        | 159       |
| 2 | Australia | 2018 | 166           | 158            | 153                         | 160        | 166       |

Я хочу оценить эти данные от 1 до 5 для каждой строки:

|   | name      | time | electoral_not | government_not | political_participation_not | cultur_not | civil_not |
|---|-----------|------|---------------|----------------|-----------------------------|------------|-----------|
| 0 | Iceland   | 2018 | 3             | 2              | 4                           | 5          | 1         |
| 1 | Norway    | 2018 | 2             | 4              | 5                           | 3          | 1         |
| 2 | Australia | 2018 | 4.5           | 2              | 1                           | 3          | 4.5       |

Если в одном и том же значении содержится более одного значенияподряд они должны быть усреднены. Пример для Австралии Ценности:166 158 153 160 166Сортировка:153 158 160 166 166Scrore_table:1 2 3 4 5Результат:

| 4       | 2 | 1 | 3 | 5       |
|---------|---|---|---|---------|
| (4+5)/2 | 2 | 1 | 3 | (5+4)/2 |
| 4.5     | 2 | 1 | 3 | 4.5     |

Я только сделал это:

def fun(x):
    row = list(x[2:7])
    x[2:7] = find_note(row)
    return x

def find_note(row):
    ranked = row.copy()
    ranked.sort()
    row = deque(row)
    note=[]
    while row:
        value = row.popleft()
        for i in range(5):
            if value==ranked[i]:
                note.append(i+1)
                break
    return note

x = combined.apply(lambda x: fun(x), axis=1)[['name','time','electoral_not','government_not','political_participation_not','cultur_not','civil_not']]

и результат:

| name | time      | electoral_not | government_not | political_participation_not | cultur_not | civil_not |   |
|------|-----------|---------------|----------------|-----------------------------|------------|-----------|---|
| 0    | Iceland   | 2018          | 3              | 2                           | 4          | 5         | 1 |
| 1    | Norway    | 2018          | 2              | 4                           | 5          | 3         | 1 |
| 2    | Australia | 2018          | 4              | 2                           | 1          | 3         | 4 |
| 3    | Denmark   | 2018          | 5              | 4                           | 2          | 3         | 1 |

1 Ответ

0 голосов
/ 24 сентября 2019

Метод rank имеет средний аргумент.

df[['electoral_not','government_not','political_participation_not','cultur_not','civil_not']].rank(method='average', axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...