pandas - 如何按列表中的值对数据框进行排序
问题描述
我有一个带有数字的列表:
[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
我怎样才能做到这一点?
解决方案
使用 sorted 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()]
推荐阅读
- typescript - 在`.d.ts`中导出枚举会导致“无法解决”错误
- javascript - 尝试将json中的图像从我的nestjs api发送到另一个api
- javascript - 如何在 React 中默认选择索引项
- jmeter - JMeter - 保持当前威胁活跃
- python - 如何提取字符串中整数值的第二个实例
- r - 根据列中的正则表达式语法,将变量添加到包含每行最大值的数据框中
- angular - 问题是使用 Angular `renderer` 创建单选按钮
- c - 分配指针值
- python - Pyspark,如何附加数据帧但从特定数据帧中删除重复项
- python - 在带有循环的子图图中绘制图例项名称