如何对具有多列的 Pandas DataFrame 进行排序,其中一些按升序排列,另一些按降序排列?

Fel*_* D. 1 python sorting dataframe pandas

如何根据多列对 Pandas DataFrame 进行排序,其中一些列按升序排序而其他列按降序排序?

此外,假设将用于排序的列有太多唯一值,无法为排序键或函数一一列出pd.Categorical(如本线程中建议的)。

这是一个可重现的小示例:

import pandas as pd

my_df = pd.DataFrame({'col1':['a','a','a','a','b','b','b','b','c','c','c','c'],
                      'col2':[1,1,2,2,1,1,2,2,1,1,2,2],
                      'col3':[1,2,1,2,1,2,1,2,1,2,1,2]})
Run Code Online (Sandbox Code Playgroud)

假设在上面的示例中,我想my_df按如下方式排序:

  • col1按降序排列
  • col2按降序排列
  • col3按升序排列

Fel*_* D. 11

DataFrame.sort_values方法可以很容易地处理这个问题。只需使用ascending参数并提供布尔值列表。

import pandas as pd

my_df = pd.DataFrame({'col1':['a','a','a','a','b','b','b','b','c','c','c','c'],
                      'col2':[1,1,2,2,1,1,2,2,1,1,2,2],
                      'col3':[1,2,1,2,1,2,1,2,1,2,1,2]})

my_df = my_df.sort_values(by=['col1','col2','col3'], 
                          ascending=[False, False, True])
Run Code Online (Sandbox Code Playgroud)

请注意,参数中提供的列表ascending必须与参数中提供的列表具有相同的长度by