groupby分类分组聚合函数。
#1.先用字典产生一个数据库
In [1]:
import pandas as pd
d = {"a":(0,1,0,1,1),"b":(3,4,4,3,3),"c":[5,4,3,2,1]}
df = pd.DataFrame(d)
print(df)
a b c
0 0 3 5
1 1 4 4
2 0 4 3
3 1 3 2
4 1 3 1
注:也可用随机数产生指定形状的数据框:
import numpy as np
pd.DataFrame(np.random.randint(1,10,(3,4)),columns=list("abcd"))
#2.对数据库按照a、b属性进行分组,并提取分组后双索引关键字
In [2]:
A=df.groupby(["a","b"])
group_data = A.groups.keys() #对分组后的提取分组的关键字
print(group_data)
dict_keys([(0, 3), (0, 4), (1, 3), (1, 4)])
#3.对某关键字打印,并对分组进行统计
In [3]:
A.get_group((1, 3))
gd = A.count()
print(gd)
c
a b
0 3 1
4 1
1 3 2
4 1
#4.对分组后的索引做成列属性
In [4]:
gd.reset_index(drop=False)
Out[4]:
a b c
0 0 3 1
1 0 4 1
2 1 3 2
3 1 4 1
#5.显示分组后的数据
In[5]: A.first()
c
a b
0 3 5
4 3
1 3 2
4 4
【groupby】的使用
单类分组:df.groupby("性别")
eg: df.groupby("性别").describe().unstack()
多类分组: df.groupby( ["班级","性别"])
eg: df.groupby( ["班级","性别"]).mean()
df.groupby( ["班级","性别"]).agg([np.sum, np.mean, np.std]) # 一次计算了三个
时间分组:
1、按照【生日】的【年份】进行分组,看看有多少人是同龄?
df["生日"] = pd.to_datetime(A["生日"],format ="%Y/%m/%d") # 转化为时间格式
df.groupby(A["生日"].apply(lambda x:x.year)).count() # 按照【生日】的【年份】分组
2、同一年作为一个小组,小组内生日靠前的那一位作为小队长
df.sort_values("生日", inplace=True) # 按时间排序
df.groupby(A["生日"].apply(lambda x:x.year),as_index=False).first()
还可以输入200个字
蝈蝈派【海南省教改项目(Hnjg2022-80)支持】 网站版权所有
Python remained the copyright of our website