Pandas详解十六之groupby分组后分开运算 |
您所在的位置:网站首页 › 两列数据如何相减 › Pandas详解十六之groupby分组后分开运算 |
约定 import pandas as pd import numpy as np groupby分组后分开运算Groupby对象支持迭代,当我们分组后想保存分组结果而不想运算,或者分别对每组进行不同的运算,这时是十分有用的。 1 创建 df1=pd.DataFrame({'Data1':np.random.randint(0,10,5),'Data2':np.random.randint(10,20,5),'key1':list('aabba'),'key2':list('xyyxy')}) print(df1) Data1 Data2 key1 key2 0 0 18 a x 1 9 11 a y 2 0 13 b y 3 9 19 b x 4 5 13 a y2 分析分组的结果 下例用列:key1来对df1进行分组,由上面key1只有:a、b,故分为两组。下面解包时是以tuple(key1,分组结果)返回的。 a,b= df1.groupby('key1') print(a) print('a的类型:',type(a)) print('\n',a[0]) print('a[0]的类型:',type(a[0])) print('\n',a[1]) print('a[1]的类型:',type(a[1])) ('a', Data1 Data2 key1 key2 0 0 18 a x 1 9 11 a y 4 5 13 a y) a的类型: a a[0]的类型: Data1 Data2 key1 key2 0 0 18 a x 1 9 11 a y 4 5 13 a y a[1]的类型:3 对groupby结果进行迭代 for name,group in df1.groupby('key1'): print('*'*13+name+'*'*13+'\n',group) print() *************a************* Data1 Data2 key1 key2 0 0 18 a x 1 9 11 a y 4 5 13 a y *************b************* Data1 Data2 key1 key2 2 0 13 b y 3 9 19 b x4 分析用多个列进行分组的结果 下例用列:key1、key2来对df1进行分组,故分组结果为4个。下面解包时是以tuple((key1,key2),分组结果)返回的。 gr1=df1.groupby(['key1','key2']) print('长度:',len(gr1),'\n') ax,ay,bx,by=gr1 print('ax :\n',ax) 长度: 4 ax : (('a', 'x'), Data1 Data2 key1 key2 0 0 18 a x)5 迭代 for (key1,key2),group in df1.groupby(['key1','key2']): print('*'*13+key1+key2+'*'*13+'\n',group) print() *************ax************* Data1 Data2 key1 key2 0 0 18 a x *************ay************* Data1 Data2 key1 key2 1 9 11 a y 4 5 13 a y *************bx************* Data1 Data2 key1 key2 3 9 19 b x *************by************* Data1 Data2 key1 key2 2 0 13 b y6 将分组结果变成字典 dict1=dict(list(df1.groupby('key1'))) print(dict1['b']) Data1 Data2 key1 key2 2 0 13 b y 3 9 19 b x dict2=dict(list(df1.groupby(['key1','key2']))) print(dict2[('a','y')]) Data1 Data2 key1 key2 1 9 11 a y 4 5 13 a y7 根据列的数据类型dtype对列进行分组 print('df1 各列的数据类型\n',df1.dtypes,'\n') for key,group in dict(list(df1.groupby(df1.dtypes,axis=1))).items(): print("*"*5,key,"*"*5) print(group,'\n') df1 各列的数据类型 Data1 int32 Data2 int32 key1 object key2 object dtype: object ***** int32 ***** Data1 Data2 0 0 18 1 9 11 2 0 13 3 9 19 4 5 13 ***** object ***** key1 key2 0 a x 1 a y 2 b y 3 b x 4 a y谢谢大家的浏览, 希望我的努力能帮助到您, 共勉! |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |