如何在pandas数据框中对值进行排序和子排序?

时间:2018-03-09 20:44:33

标签: python pandas

我下载了kickstarter dataset from kaggle,现在我希望看到最受欢迎的类别与3种不同的状态分开('成功','失败',& #39;取消')我希望获得像

这样的输出
ks.groupby(['main_category','state']).count().sort_values('name', ascending=False)

我尝试了Film & Video failed 29653 29652 29653 Music successful 21763 21763 21763 Film & Video successful 21404 21404 21404 Publishing failed 19920 19920 19920 Music failed 19193 19193 19193 Technology failed 16347 16347 16347 Food failed 13602 13602 13602 ,但是对原始数字进行了分类:

state

我不确定如何对java.lang.NoSuchMethodError: No virtual method startRanging(Landroid/net/wifi/rtt/RangingRequest;Ljava/util/concurrent/Executor;Landroid/net/wifi/rtt/RangingResultCallback;)V in class Landroid/net/wifi/rtt/WifiRttManager; or its super classes (declaration of 'android.net.wifi.rtt.WifiRttManager' appears in /system/framework/framework.jar) 上的总计数和子顺序进行排序。我尝试对多列进行排序,但主要的排序是绝对数字。

2 个答案:

答案 0 :(得分:1)

这是一个解决方案:

ks.groupby(['main_category','state']).count()[["name"]].reset_index().sort_values(["main_category","name"], ascending=False)

groupbycount之后,您需要reset_index然后sort_values

这是我的输出:

enter image description here

答案 1 :(得分:0)

我相信我解决了它。不确定它是否是最优雅的解决方案,但它提供了最受欢迎的main_categories。首先,我需要在一个单独的新列中broadcast totals_per_main_category:

ks['total']=ks.groupby('main_category').transform('count')['ID']

然后我需要groupby('total', 'main_category', 'state'),然后是Yilun回答中提到的reset_index

ks.groupby(['total','main_category','state']).count().reset_index().sort_values(['total','ID'], ascending=False)