【问题标题】:How to sort a dataframe by values from a list如何按列表中的值对数据框进行排序
【发布时间】:2020-06-14 19:45:23
【问题描述】:

我有一个数字列表:

[18, 22, 20]

和一个数据框:

Id                       | node_id
UC5E9-r42JlymhLPnDv2wHuA | 20
UCFqcNI0NaAA21NS9W3ExCRg | 18
UCrb6U1FuOP5EZ7n7LfOJMMQ | 22

列表编号映射到 node_id 编号。 node_id 编号的顺序很重要,它们必须按照列表编号的顺序。

所以数据框的顺序错误。

我需要按列表值对数据框进行排序。

最终结果应该是:

Id                       | node_id
UCFqcNI0NaAA21NS9W3ExCRg | 18    
UCrb6U1FuOP5EZ7n7LfOJMMQ | 22
UC5E9-r42JlymhLPnDv2wHuA | 20

我该怎么做?

【问题讨论】:

标签: pandas list dataframe sorting


【解决方案1】:

使用排序的Categorical,所以你可以使用DataFrame.sort_values

L = [18, 22, 20]
df['node_id'] = pd.Categorical(df['node_id'], ordered=True, categories=L)
df = df.sort_values('node_id')
print (df)
                         Id node_id
1  UCFqcNI0NaAA21NS9W3ExCRg      18
2  UCrb6U1FuOP5EZ7n7LfOJMMQ      22
0  UC5E9-r42JlymhLPnDv2wHuA      20

如果想避免Categorical 列:

df = df.iloc[df['node_id'].map({v: k for k, v in enumerate(L)}).argsort()]

【讨论】:

  • 谢谢,YOBEN_S 的单班轮有什么不同吗?
  • @Vega - 另一种解决方案是错误的。因为缺少ordered=True
【解决方案2】:

我会的

l=[18, 22, 20]
df=df.iloc[pd.Categorical(df.node_id, l).argsort()]
Out[79]: 
                         Id  node_id
1  UCFqcNI0NaAA21NS9W3ExCRg       18
2  UCrb6U1FuOP5EZ7n7LfOJMMQ       22
0  UC5E9-r42JlymhLPnDv2wHuA       20

【讨论】:

    猜你喜欢
    • 2016-09-05
    • 2021-10-29
    • 2022-11-12
    • 2019-10-14
    • 2021-05-15
    • 2020-01-23
    • 2010-11-20
    相关资源
    最近更新 更多