参考来源:Vitu.AIDataGroupAggregationandSortingGroupAggregation很重要,它在pandas官方文档中有专门的章节:Groupby:split-应用-结合。importpandasaspdpd.set_option('max_rows',5)importnumpyasnpmelbourne_data=pd.read_csv('melb_data.csv')melbourne_data.head()map允许我们一次转换整个列的DataFrame或Series中的数据.但是,我们往往希望对数据进行分组,然后对数据所在的组进行特定的操作。为此,我们可以使用groupby操作。例如,到目前为止我们经常使用的一个函数是value_counts函数。我们可以通过执行以下groupby操作来复制value_counts的作用:melbourne_data.groupby('Rooms').Rooms.count()groupby创建一组分类,将相同的点值分配给给定的房屋分类。然后,对于这些组中的每一个,我们计算它出现的次数。value_counts只是此groupby操作的快捷方式。我们可以使用我们之前使用过的任何聚合函数。例如,要获得每个类别中最便宜的房子,我们可以这样做:melbourne_data.groupby('Rooms').Price.min()匹配值。我们可以使用apply方法直接访问这个DataFrame,然后我们可以以我们认为合适的任何方式操作数据。例如,这里有一种方法可以选择数据集中每个房屋郊区的第一所房屋的地址:melbourne_data.groupby('Suburb').apply(lambdadf:df.Address.iloc[0])对于更精细的粒度控制,您还可以按多列分组。例如,我们将按地区和郊区选择昂贵的房屋:melbourne_data.groupby(['Regionname','Suburb']).apply(lambdadf:df.loc[df.Price.idxmax()])另一个groupby方法worth值得一提的是agg,它允许您同时在DataFrame上运行一堆不同的函数。例如,我们可以生成数据集的简单统计摘要,如下所示melbourne_data.groupby(['Suburb']).Price.agg([len,min,max])手术。多个索引在目前为止我们看到的所有示例中,我们一直在使用具有单标签索引的DataFrame或Series对象。groupby略有不同,因为根据我们运行的操作,它有时会产生所谓的多索引。多重索引与常规索引的不同之处在于它具有多个级别。例如:house=melbourne_data.groupby(['Regionname','Suburb']).Address.agg([len])housemi=_.indextype(mi)多索引有多种处理其层次结构的方法,这些方法对于单级索引是不存在的。它还需要两级标签来检索值。处理多索引输出是pandas新用户的常见“问题”。MultiIndex的详细用例以及使用它们的详细说明,请参见pandas文档的MultiIndex/AdvancedSelection部分。但是,通常大家最常使用的MultiIndex方法是转换回常规索引的方法,也就是reset_index方法:house.reset_index()按价值排序。即在输出一个groupby的结果时,行的顺序取决于索引中的值,而不是数据中的值。为了得到我们想要的数据,我们可以自己排序。sort_values方法对此很方便。house=house.reset_index()house.sort_values(by='len')sort_values默认按升序排序,值小的在前。大多数时候,我们希望按降序排列,其中较高的数字在前。这样做:house.sort_values(by='len',ascending=False)要按索引值排序,请使用配套方法sort_index。该方法参数相同,默认顺序:house.sort_index()最后可以一次多列排序:house.sort_values(by=['Regionname','len'])原文地址:DataProcessing[SwissArmyKnifePandasGuide】:4.分组聚合与排序
