"""pandas提供了一个灵活高效的groupby功能,它使你能一种自然地方式对数据集进行切片,切换,摘要等操作。 根据一个或者多个键(可以是函数可以是数组或者DataFrame列名)拆分pandas对象。计算分组摘要统计, 如计数、平均数、标准差、或者用户自定义的函数 1:首先看看下面这个非常简单的表格性数据集 """ import pandas as pd import numpy as np import random random.seed() df = pd.DataFrame({'key1':['a', 'a', 'b', 'b', 'a'], 'key2':['one', 'two', 'one', 'two', 'one'], 'data1':np.random.randn(5), 'data2':np.random.randn(5)}) print(df) #假设你想要按key1进行分组,并计算data1列的平均值,你可以先访问data1,并且根据key1调用groupby: grouped=df['data1'].groupby(df['key1']) #根据一个条件进行分组 """ 注意groupby是一个Groupby对象,他实际上还没有进行任何计算, 只是含有一些有关分组键df['key1']的中间数据而已,然后我们可以掉用GroupBy的mean()方法来计算分组的平均值。 """ print(grouped) print(grouped.mean()) """ 注意:数据Series根据分组键进行聚合,产生一个新的Series,其索引为key1列中的唯一值,之所以 结果中的索引值的名称为key1,是因为原始的DataFrame的列df['key1']就叫这个名字。 """ print(type(grouped.mean())) """" 2:如果我们一次传入多个分组,就会得到不同的结果。 通过两个键对数据进行了分组,得到的Series具有一个层次化索引 """ means=df['data1'].groupby([df['key1'],df['key2']]) print(means.mean()) #以上这些事例二中,分组键均为Series.实际上,分组键可以是任何长度适当的数组。 print("*"*50) #************************************************************************************************* states = np.array(['Ohio', 'California', 'California', 'Ohio', 'Ohio']) years = np.array([2005, 2005, 2006, 2005, 2006]) grouped2=df['data1'].groupby([states,years]).mean() print(grouped2) print("*"*50) #************************************************************************************ """" 3:此外还可以将列名用作分组 """ grouped3=df.groupby('key1') print(grouped3.mean()) #用列名进行多个条件进行分组 grouped4=df.groupby(['key1','key2']) print(grouped4.mean()) """" 说明:在执行df.groupby('key1').mean()时:结果中没有key2列。这是因为df['key2]不是数值数据,所以被从结果中 排除了出来,默认情况下,虽有数值列都会被聚合,虽然有时候会过滤为一个子集。 """ #无论你准备拿groupby做什么,都有可能用到groupby中的size方法,他可以返回一个含有分组大下的Series size=df.groupby(['key1','key2']).size() print(size) """ 注意分组中的任何缺失值都会被排除在结果中外的。 """ """" 4:对分组进行迭代 注意:GroupBy对象支持迭代,可以产生一组二元数组(有分组名和数据块组成)。看看下面的这个简单的数据集: """ for name,group in df.groupby('key1'): print(name) print(group) #对于多键的情况,元组的第一元素将会是由键值组成的元组: for (k1,k2),group in df.groupby(['key1','key2']): print(k1,k2) print(group) """" 5:选取一个或者一组列 """ da1=df.groupby('key1')['data1'] da2=df.groupby('key1')['data2'] #以上的代码等价为: da1=df['data1'].groupby(df['key1']) da2=df['data2'].groupby(df['key1']) """ 尤其对于大数据集,很可能值需要对部分列进行聚合。例如:在前面的数据集, 如果只需计算data2的平均值并且以DataFrame形式得到结果 """ group2=df.groupby(['key1','key2'])['data2'].mean() print(group2) group3=df.groupby(['key1','key2'])[['data2']].mean() print(group3) """ 注意:以上的这两种操作所返回的对象是一个已分组的DataFrame(如果传入的是列表或数组) 或已分组的Series(如果传入的是标量形式的单个列名) """
pandas中的GroupBy函数
猜你喜欢
转载自blog.csdn.net/bll1992/article/details/85104070
今日推荐
周排行