根据多个键对列进行排序

时间:2020-05-03 06:36:00

标签: python pandas dataframe

我的数据框如下

  release  count
0    2.18    602
1     3.0    617
2     1.9    168
3    2.15    590
4    2.21    622
5    2.19    606
6    2.17    595
7    2.20    617
8     2.3    617

我希望列count的排序优先,然后列release优先。

预期答案为

  release  count
2     1.90    168
3     2.15    590
6     2.17    595
0     2.18    602
5     2.19    606
7     2.20    617
4     2.21    622
8     2.30    617
1     3.00    617

4 个答案:

答案 0 :(得分:0)

我认为有字符串,需要像浮点数那样进行排序。

Series.argsort的列转换为浮点以用于排序值的位置,因此添加了DataFrame.iloc来进行更改顺序:

df = df.iloc[df['release'].astype(float).argsort()]
print (df)
   release  count
2     1.90    168
3     2.15    590
6     2.17    595
0     2.18    602
5     2.19    606
7     2.20    617
4     2.21    622
8     2.30    617
1     3.00    617

答案 1 :(得分:0)

推荐的方法是使用函数sort_values

因此:

df.sort_values(by=['release'])

答案 2 :(得分:0)

我们可以使用sort_values根据多个键对数据框进行排序。

df.sort_values(by=['count','release'], inplace = True)

第一个键count将给出第一级排序,而release将给出第二级排序。

您不必创建单独的函数即可对python进行排序

答案 3 :(得分:0)

我有个主意,并实现了以下

val df = spark.read.csv("s3://../parentFolder/")
//df.schema will give you `period` as one of the column
df.printSchema
root
 |-- col1: string (nullable = true)
 |-- .... //other columns go here
 |-- period: string (nullable = true)

这现在对我有用。