大熊猫:按两列分组,然后按第三列的值排序

时间:2018-08-06 06:45:02

标签: python pandas sorting dataframe pandas-groupby

我有以下一行:

genre_df.groupby(['release_year', 'genres']).vote_average.mean()

这给了我以下内容:

release_year  genres         
1960          Action             6.950000
              Adventure          7.150000
              Comedy             7.900000
              Drama              7.600000
              Fantasy            7.300000
              History            6.900000
              Horror             8.000000
              Romance            7.600000
              Science Fiction    7.300000
              Thriller           7.650000
              Western            7.000000
1961          Action             7.000000
              Adventure          6.800000
              Animation          6.600000
              Comedy             7.000000
              Crime              6.600000
              Drama              7.000000
              Family             6.600000
              History            6.700000
              Music              6.600000
              Romance            7.400000
              War                7.000000
...

我想看到的是按发行年份和流派分组的df,但先按最高投票平均数排序。

又名:

 release_year  genres         
    1960          Horror             8.000000
                  Comedy             7.900000
                  Action             6.950000
                  Thriller           7.650000
                  Drama              7.600000
                  Romance            7.600000
                  Fantasy            7.300000
                  Science Fiction    7.300000
                  Adventure          7.150000
                  Western            7.000000
                  History            6.900000

如何实现?

2 个答案:

答案 0 :(得分:2)

0.23.0+的解决方案-首先用to_frame创建一个列DataFrame,然后创建sort_values

df = df.to_frame().sort_values(['release_year','vote_average'], ascending=[True, False])
print (df)
                              vote_average
release_year genres                       
1960         Horror                   8.00
             Comedy                   7.90
             Thriller                 7.65
             Drama                    7.60
             Romance                  7.60
             Fantasy                  7.30
             Science Fiction          7.30
             Adventure                7.15
             Western                  7.00
             Action                   6.95
             History                  6.90
1961         Romance                  7.40
             Action                   7.00
             Comedy                   7.00
             Drama                    7.00
             War                      7.00
             Adventure                6.80
             History                  6.70
             Animation                6.60
             Crime                    6.60
             Family                   6.60
             Music                    6.60

对于较旧版本的熊猫,必须reset_indexset_index

df = (df.reset_index()
       .sort_values(['release_year','vote_average'], ascending=[True, False])
       .set_index(['release_year','genres']))

答案 1 :(得分:0)

尝试一下:

   genre_df = genre_df.reset_index()
   genre_df.sort_values(['vote_average'],ascending=False)