Python数据分析中Groupby用法之通过字典或Series进行分组的实例
在数据分析中有时候需要自己定义分组规则这里简单介绍一下用一个字典实现分组
people=DataFrame( np.random.randn(5,5), columns=['a','b','c','d','e'], index=['Joe','Steve','Wes','Jim','Travis'] ) mapping={'a':'red','b':'red','c':'blue','d':'blue','e':'red','f':'orange'} by_column=people.groupby(mapping,axis=1)#列方向上进行分组
这里不知道python底层是怎么运行的,最好把运行的结果打印出来看一下
foriinby_column: print(i)
遍历的结果:
('blue',cd Joe0.218189-0.228336 Steve1.6772640.630303 Wes0.315320-0.250787 Jim3.3434620.483021 Travis0.854553-0.760884) ('red',abe Joe0.2181640.823654-1.425720 Steve1.191175-0.3277351.926470 Wes-1.4188550.4974660.110105 Jim-1.1571570.8171220.749023 Travis-0.440583-0.9079221.374294)
从结果可以看到,把abe分给了red,cd分给了blue
abe--->red
cd--->blue
接下来再来执行people.groupby(mapping,axis=1).mean()
bluered Joe0.241336-0.182099 Steve0.459773-0.448336 Wes0.2052780.605721 Jim-0.0948381.254174 Travis0.3541400.142075
从结果看到在列方向group分组执行聚合函数mean()后列索引就只有blue和red了。
整个过程可以这么理解在列方向上进行分组abe为一组为red,cd为一组为blue。最后以redblue作为新DataFraem的列索引
同样Series也有同样的功能,它可以被看作一个固定大小的映射。对于上面的那个例子,如果用series作为分组键,则pandas会检查Series以确保其索引分组轴是对齐的:
ser=Series(mapping)
ared
bred
cblue
dblue
ered
forange
by_ser_group=people.groupby(ser,axis=1).mean()
bluered
Joe0.241336-0.182099
Steve0.459773-0.448336
Wes0.2052780.605721
Jim-0.0948381.254174
Travis0.3541400.142075
从结果可以看到,通过字典进行分组和通过Series进行分组结果是相同的。也就是说他们执行的原理是相同的,都是把索引(对series来说)或字典的key与Dataframe的索引进行匹配,
字典中value或series中values值相同的会被分到一个组中,最后根据每组进行在聚合。
groupby的用法很多,之后有时间我会慢慢更新博客。如果有那些地方有错欢迎大家指出,一块学习,共同进步。
以上这篇Python数据分析中Groupby用法之通过字典或Series进行分组的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。