Ранжирование нескольких строковых столбцов с использованием панд

1

Кадр данных, с которым я работаю, имеет три столбца с именем list1, list2 и list3 на основе трех отдельных списков "лучших мест для жизни".

Желаемый результат:

Я хочу вернуть еще один столбец, серию или группу, который показывает общий рейтинг для каждого города после того, как он учитывает положение во всех списках, поэтому Edingburgh возглавит список, а другие будут следовать в зависимости от того, насколько они близки к ранжированию на вершину каждого столбца. Для того, чтобы уточнить, Edingburgh занимает 1 место в list2 и list3.

Он будет выглядеть примерно так:

1 Edingburgh 
2 Hart 
3 Orkney, London, Solihull 
4 Rutland, Bristol Hertfordshire 
5 Wychavon, Newcastle, Northumberland

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

Что я пробовал?

Я надеялся, что будет простой способ ранжирования с использованием чего-то типа places2live.rank() но не вижу, как я могу использовать это со строковыми значениями.

Данные

    list1      list2        list3
0   Hart       Edinburgh    Edinburgh
1   Orkney     London       Solihull
2   Rutland    Bristol      Hertfordshire
3   Wychavon   Newcastle    Northumberland
4   Winchester Manchester   South Lanarkshire
5   Wokingham  Glasgow      Berkshire
6   Waverley   Leeds        Darlington
7   Craven     Cardiff      North Lanarkshire
  • 2
    Можете ли вы показать нам ваш ожидаемый выход?
  • 0
    @Wen Пожалуйста, смотрите обновленный желаемый раздел вывода. Спасибо
Показать ещё 2 комментария
Теги:
pandas
dataframe

1 ответ

1
Лучший ответ

Вот один из подходов:

cities = pd.Index(np.unique(df.values))
ranks = pd.Series([1] * len(cities), index=cities)

for column in df:
    ranks = ((ranks + df.reset_index().set_index(column)['index'])/2).fillna(ranks)

city_ranks = ranks.reset_index().groupby(0)['index'].apply(list).reset_index(drop=True)
city_ranks.index += 1
print(city_ranks)

[выход]

1                                    [Edinburgh]
2                                         [Hart]
3                     [London, Orkney, Solihull]
4              [Bristol, Hertfordshire, Rutland]
5          [Newcastle, Northumberland, Wychavon]
6    [Manchester, South Lanarkshire, Winchester]
7                [Berkshire, Glasgow, Wokingham]
8                  [Darlington, Leeds, Waverley]
9           [Cardiff, Craven, North Lanarkshire]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню