python - 使用列表中的特定顺序按列排序数据帧
问题描述
是否可以按具有特定顺序的列排序/运行数据框,比如我有
col1 col2
v_1 4
v_2 3
v_3 1
并说您要订购为:
col1 col2
v_3 1
v_1 4
v_2 3
因为我想在 col1 列中按 [3,1,2] 排序。简化示例,因为我的 df 有 42 行。我期望能够传递一个值列表 [3,1,2] 并根据这些指标对 col1 进行排序,因此 1 指的是 v_1 等
解决方案
一种方法是创建一个临时列order
并从该列中获取列表项的索引col1
,然后在此临时列上对数据框进行排序,并在返回数据框之前删除该列。
像这样的东西:
def sortDF(df, lst, colName='col1'):
df['order'] = df[colName].apply(lambda x: lst.index(x))
return df.sort_values(['order']).drop(columns=['order'])
样品输出:
>>> df
col1 col2
0 1 4
1 2 3
2 3 1
>>> sortDF(df, [3,1,2], 'col1')
col1 col2
2 3 1
0 1 4
1 2 3
PS:上面的方法期望col1
列表中的所有值也存在,否则会抛出IndexError
,如果不是这种情况,您可以手动处理该情况,并通过列表示NaN
,然后您可以在对数据帧进行排序order
时使用参数na_position
.
推荐阅读
- ruby-on-rails - Rails:使用 html 输入标签获取选中的单选按钮值
- sql - 创建一个虚拟值
- eclipse - 无法在 Eclipse 中为 jhipster 示例应用程序 gradle 运行 junits
- javascript - 有人玩 Discord.js v12 时的自动角色
- c# - MQTT 网络或任何其他私有 MQTT 服务器/代理是否有完整的管理面板/界面?
- javascript - 将 html 文件附加到由 js 脚本创建的 div
- python - Twitter 流媒体 API 未获得所有转推
- android - 有没有办法识别设备何时退出打盹模式或处于维护窗口?
- python - 从句子或单词中删除符号和标点符号
- python - 将一列添加到numpy数组