【问题标题】:Rank multiple string columns using Pandas使用 Pandas 对多个字符串列进行排名
【发布时间】:2018-08-31 03:31:20
【问题描述】:

我正在使用的数据框包含三个名为 list1list2list3 的列,基于三个单独的“最佳居住地”列表。

期望的输出:

我想返回另一个列、系列或 groupby,它显示每个城市在考虑所有列表中的位置后的总体排名,因此 Edingburgh 将位居榜首,其他人将根据它们的接近程度紧随其后的排名到每列的顶部。澄清一下,爱丁堡在list2list3 中排名第一。

它看起来像这样:

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

【问题讨论】:

  • 你能告诉我们你的预期输出吗?
  • @Wen 请查看更新后的所需输出部分。谢谢
  • 我将创建另一个数据集,其中仅包含 [list1, list2, list3] 的唯一值(即每个城市),然后在这个新数据集中设置 list1 等于该城市所在的行号list1 在原始数据集中。对list2list3 重复此操作。然后,对于每个城市,计算list1list2list3的平均值,然后按照新创建的avg_rank变量排列新数据集。
  • 我不清楚你是如何生成输出的,你能描述一下你为创建整体排名所采取的步骤吗?

标签: python pandas dataframe


【解决方案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]

【讨论】:

    猜你喜欢
    • 2021-10-13
    • 2022-09-29
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    相关资源
    最近更新 更多