首先 在sql中 分组操作group by是对行记录的拆分
在pandas中 分组操作groupby可以选择对行或者列进行拆分
pandas分组之后可以根据每组的组名value(非列名)访问部分数据
类似于sql中 group by之后的having 分组列名=value
最后都是用聚合方法 合并计算数据
1 import numpy as np 2 import pandas as pd 3 from pandas import DataFrame,Series 4 df1=DataFrame({'symbol':['001','001','002','002','003'], 5 'tdate':['201901','201902','201901','201902','201901'], 6 'open':np.random.randint(0,50,5), 7 'close':np.random.randint(50,100,5)}) 8 9 print(df1) 10 11 grp1=df1.groupby('symbol') 12 grp2=df1.groupby(['symbol','tdate']) 13 14 print('#可用循环语句访问组名和每组的内容') 15 for name,group in grp1: 16 print(name) 17 print(group) 18 19 print('#通过组名访问数据') 20 print(grp1.get_group('001')) 21 print(grp2.get_group(('001','201901'))) 22 23 print('#计算指定列的均值 三种等价写法') 24 print(grp1.open.mean()) 25 print(grp1.open.agg('mean')) #这里函数mean要加引号 如果是自定义函数不需要 26 print(grp1.agg({'open':'mean'})) #这里指定了列名 返回DataFrame而非Series 27 28 print('#计算指定列的指定聚合方法') 29 def my_func(x): 30 return max(x)-min(x) 31 print(grp1.open.agg(my_func)) 32 print(grp1.open.agg(lambda x:max(x)-min(x))) #用匿名函数 33 34 print('#对指定列进行计算处理') 35 print(grp1.open.apply(lambda x:x+100))
结果如下图
同时 pandas可以直接对列进行拆分 设置groupby 参数axis=1即可
这个在sql中是难以做到的
1 import numpy as np 2 import pandas as pd 3 from pandas import DataFrame,Series 4 df1=DataFrame({'symbol':['001','001','002','002','003'], 5 'tdate':['201901','201902','201901','201902','201901'], 6 'open':np.random.randint(0,50,5), 7 'close':np.random.randint(50,100,5)}) 8 9 print(df1) 10 11 print('#'*20) 12 13 grp3=df1.groupby(df1.dtypes,axis=1) 14 grp4=df1.groupby({'symbol':'a','tdate':'a','open':'b','close':'b'},axis=1) 15 16 for name,group in grp3: 17 print(name) 18 print(group) 19 20 print('#'*20) 21 22 for name,group in grp4: 23 print(name) 24 print(group) 25 if name=='b': 26 print('#根据组名访问') 27 print(grp4.get_group(name)) 28 print('#聚合操作') 29 print(grp4.get_group(name).mean())
结果如下图
谢谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。