【问题标题】:Sort pandas data frame alphabetically not working [closed]按字母顺序对熊猫数据框进行排序不起作用[关闭]
【发布时间】:2021-11-05 19:50:09
【问题描述】:

我知道我们可以使用 df.sort_values() 对 df 进行排序,但由于某种原因它对我不起作用。我在这里被困了将近 6 个小时。

我有一个字典

dict_table  = {'2 bedroom flat in London': 3515, '2 bedroom flat in london': 3515, 'Dalton': 188, 'Lincolnshire': 796, 'London': 3515, 'Yorkshire': 0, 'garden': 566, 'greenwich': 1740, 'london': 3515}

我正在使用将其转换为数据框

df = pd.DataFrame(dict_table.items())
df.columns = ['Search query', 'No of search results']
df.index +=1

    Search query                No of search results
1   2 bedroom flat in London    3515
2   2 bedroom flat in london    3515
3   Dalton                      188
4   Lincolnshire                796
5   London                      3515
6   Yorkshire                   0
7   garden                      566
8   greenwich                   1740
9   london                      3515

然后我尝试使用 df = df.sort_values('Search query') 对其进行排序,这不起作用,但 df.sort_values('No of search results') 确实有效。

    Search query                No of search results
6   Yorkshire                   0
3   Dalton                      188
7   garden                      566
4   Lincolnshire                796
8   greenwich                   1740
1   2 bedroom flat in London    3515
2   2 bedroom flat in london    3515
5   London                      3515
9   london                      3515

任何人都可以帮助我使用搜索查询对数据框进行排序。

拜托拜托

【问题讨论】:

标签: python pandas dataframe sorting dictionary


【解决方案1】:

如果您的目标是排序忽略大小写 AND 前导数字,您可以创建一个自定义排序函数,如下所示:

f = lambda x: x.str.replace('^\d+\s*', '', regex=True).str.lower()
print(df.sort_values('Search query', key=f))

               Search query  No of search results
1  2 bedroom flat in London                  3515
2  2 bedroom flat in london                  3515
3                    Dalton                   188
7                    garden                   566
8                 greenwich                  1740
4              Lincolnshire                   796
5                    London                  3515
9                    london                  3515
6                 Yorkshire                     0

【讨论】:

  • 感谢您的帮助,我不知道按字典顺序排序。
【解决方案2】:

您的解决方案完美运行,因为数据是按字典顺序排序的:首先是数字,然后是大写和小写。 (就像提到的 Corralien 厘米)

IIUC 如果需要小写排序:

df = df.sort_values(by=['Search query'], key=lambda x: x.str.lower())
print (df)
               Search query  No of search results
1  2 bedroom flat in London                  3515
2  2 bedroom flat in london                  3515
3                    Dalton                   188
7                    garden                   566
8                 greenwich                  1740
4              Lincolnshire                   796
5                    London                  3515
9                    london                  3515
6                 Yorkshire                     0

【讨论】:

  • 感谢您的帮助,我不知道字典排序
猜你喜欢
  • 2021-01-06
  • 2023-01-10
  • 2019-04-12
  • 1970-01-01
  • 2019-04-10
  • 1970-01-01
  • 2021-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多