如何在pandas中按指定顺序对DataFrame多列进行排序
Pandas多字段优先级排序问题解决
你现有写法的问题有两点:
- 连续多次调用
sort_values的逻辑错误:后执行的排序操作会打乱前一次已经排好的顺序,无法实现多优先级叠加排序。pandas的sort_values本身支持一次传入所有排序字段,by参数的列表顺序就是优先级从高到低的顺序,ascending参数传入对应长度的布尔值列表,就能分别指定每个字段的升降序规则。 - 你描述的排序优先级和你给出的期望输出不匹配:从你贴的预期结果反推,实际需要的优先级为「首先B列升序、其次C列降序、最后A列升序」,和你写的优先级顺序不一致。
正确实现代码如下:
import pandas as pd # 构造你的测试数据 data = { "A": ["a","b","c","d","e","f","g","h","i","j"], "B": ["c0","c0","c0","c1","c1","c2","c2","c1","c2","c0"], "C": [170,170,88,12,28,160,37,12,160,88] } df = pd.DataFrame(data) # 按需求排序 df = df.sort_values(by=["B", "C", "A"], ascending=[True, False, True]).reset_index(drop=True) print(df)
运行后输出结果和你给出的预期完全一致。
内容的提问来源于stack exchange,提问作者Rafael Ferreira
相关产品推荐
相关产品推荐

