Pandas三DataFrame拼接后freq、Freq、PMI多列降序排序问题排查
问题分析与解决方案
嘿,我明白你的问题啦!你现在只对freq列做了降序排序,但你的需求是按freq、Freq、PMI这三列依次降序排列,这就是结果不符合预期的核心原因~
问题出在哪里?
你当前的代码x = df_bigram.sort_values(by='freq', ascending=False)只指定了单个排序键(freq列),只会根据这一列的值降序排列,完全没有考虑Freq和PMI列的排序优先级。当你需要多列层级排序时,必须把所有要排序的列名以列表形式传给by参数,同时指定每一列的排序方向。
正确的代码实现
因为你需要按freq→Freq→PMI的顺序依次降序排序,所以应该这样写:
x = df_bigram.sort_values(by=['freq', 'Freq', 'PMI'], ascending=[False, False, False])
或者因为所有列都是降序,也可以简写为:
x = df_bigram.sort_values(by=['freq', 'Freq', 'PMI'], ascending=False)
额外注意事项
- 一定要注意列名的大小写!你这里的
freq和Freq是两个完全不同的列,拼写必须和df_bigram中的列名完全一致,否则会触发列不存在的错误,或者排序逻辑不符合预期。 - 如果拼接后的
df_bigram存在缺失值,默认情况下缺失值会被放到排序结果的末尾。如果需要调整缺失值的位置,可以添加na_position='first'参数将其放到开头。
内容的提问来源于stack exchange,提问作者ohai
相关产品推荐
相关产品推荐

