1、groupby 能作什么?
python中groupby函数主要的做用是进行数据的分组以及分组后地组内运算!python
对于数据的分组和分组运算主要是指groupby函数的应用,具体函数的规则以下:app
df[](指输出数据的结果属性名称).groupby([df[属性],df[属性])(指分类的属性,数据的限定定语,能够有多个).mean()(对于数据的计算方式——函数名称)
举例以下:
print(df["评分"].groupby([df["地区"],df["类型"]]).mean())
#上面语句的功能是输出表格全部数据中不一样地区不一样类型的评分数据平均值函数
2、单类分组
A.groupby("性别")
首先,咱们有一个变量A,数据类型是DataFramespa
想要按照【性别】进行分组3d
获得的结果是一个Groupby对象,尚未进行任何的运算。code
describe()
描述组内数据的基本统计量orm
A.groupby("性别").describe().unstack()
* 只有数字类型的列数据才会计算统计对象
* 示例里面数字类型的数据有两列 【班级】和【身高】blog
可是,咱们并不须要统计班级的均值等信息,只须要【身高】,因此作一下小的改动:排序
A.groupby("性别")["身高"].describe().unstack()
unstack()
索引重排
上面的例子里面用到了一个小的技巧,让运算结果更便于对比查看,感兴趣的同窗能够自行去除unstack,比较一下显示的效果
3、多类分组
A.groupby( ["班级","性别"])
单独用groupby,咱们获得的仍是一个 Groupby 对象。
mean()
组内均值计算
DataFrame的不少函数能够直接运用到Groupby对象上。
上图截自 pandas 官网 document,这里就不一一细说。
咱们还能够一次运用多个函数计算
A.groupby( ["班级","性别"]).agg([np.sum, np.mean, np.std]) # 一次计算了三个
agg()
分组多个运算
4、时间分组
时间序列能够直接做为index,或者有一列是时间序列,差异不是很大。
这里仅仅演示,某一列为时间序列。
为A 新增一列【生日】,因为分隔符 “/” 的问题,咱们查看列属性,【生日】的属性并非日期类型
咱们想作的是:
一、按照【生日】的【年份】进行分组,看看有多少人是同龄?
A["生日"] = pd.to_datetime(A["生日"],format ="%Y/%m/%d") # 转化为时间格式
A.groupby(A["生日"].apply(lambda x:x.year)).count() # 按照【生日】的【年份】分组
进一步,咱们想选拔:
二、同一年做为一个小组,小组内生日靠前的那一位做为小队长:
A.sort_values("生日", inplace=True) # 按时间排序
A.groupby(A["生日"].apply(lambda x:x.year),as_index=False).first()
as_index=False
保持原来的数据索引结果不变
first()
保留第一个数据
Tail(n=1)
保留最后n个数据
再进一步:
三、想要找到哪一个月只有一我的过生日
A.groupby(A["生日"].apply(lambda x:x.month),as_index=False) # 到这里是按月分组
A.groupby(A["生日"].apply(lambda x:x.month),as_index=False).filter(lambda x: len(x)==1)
filter()
对分组进行过滤,保留知足()条件的分组
以上就是 groupby 最常常用到的功能了。
用 first(),tail()截取每组先后几个数据
用 apply()对每组进行(自定义)函数运算
用 filter()选取知足特定条件的分组