Python中groupby的简单使⽤
⾸先先创建⼀个表格:
import pandas as pd
df = pd.DataFrame({'key1':list('aabba'),
'key2':['one','two','one','two','one'],
'data1': np.random.randn(5),
'data2': np.random.randn(5)})
df
得到的df表格如下所⽰:
1、使⽤单特征对表格进⾏划分
现在先简单使⽤表格中的特征’key1’对数据进⾏划分:
upby(['key1'])
for name ,group in grouped:
print(name)
print(group)
得到的划分结果如下所⽰:
通过上⾯这个图可以发现upby([‘key1’])的作⽤是根据“key1”的不同值将表格df分为两个部分,第⼀个部分
是“key1=a”,第⼆个部分是“key1=b”。⽤其它特征进⾏划分原理⼀样。
现在我们不仅是⽤“key1”对表格进⾏划分,同时还要对划分之后的表格求其中特征的均值,例如⽤以下代码求划分后的特征的均值:
grouped = df.groupby(['key1']).mean()
grouped
其输出结果如下:
groupby分组通过上图可以发现,通过“key1”对表格df划分为两部分之后,再对两部分中的“data1”和“data2”进⾏求平均值操作。这⾥不
对“key2”进⾏求平均值操作,因为特征“key2”是⽂本类信息,没有平均值,所以不进⾏求平均值操作。
2、使⽤多特征对表格进⾏划分
上⾯讨论了使⽤⼀个特征对表格df进⾏分组,现在使⽤多个特征对表格df进⾏划分,简单地分析,使⽤特征“key1”和“key2”对表格进⾏划分,那会输出什么呢?输⼊以下代码:
for name, group upby(['key1','key2']):
print("划分的特征值:",name)
print(group,'\n')
得到的输出结果如下:
通过上⾯这个图可以发现,因为现在要使⽤两个特征对表格进⾏划分,特征“key1”和特征“key2”同样有两个类别,因此组合得到的划分情况有四种,根据不同的划分组合得到符合要求的划分表格,这样就得到了上图中的情况。当使⽤三个或者四个特征对表格进⾏划分的时候,组合的个数更多,同时会划分得更加细致。具体原理是⼀样的。
2.1 对表格中的部分特征进⾏划分
在上⾯介绍多特征对表格进⾏划分的时候,我们是基于整个表格进⾏划分的,如果我们只想针对其中的部分特征进⾏划分,具体⼜该怎么操作呢?我们现有有下⾯这个表格,如果我们只想对其中的“data1”和“data2”基于“key1”进⾏划分,该怎么操作呢?
输⼊以下代码:
for name, group in df[['data1','data2','key1']].groupby(['key1']):
print("划分的特征值:",name)
print(group,'\n')
得到的输出结果如下图所⽰:
其实这个和最开始介绍的对整个表格进⾏划分的原理是⼀样的,但是需要注意的是,代码不能写成下⾯的形式:
for name, group in df[['data1','data2']].groupby(['key1']):
print("划分的特征值:",name)
print(group,'\n')
这样的代码是错误的,这段代码和前⼀段代码的差别主要在于df[[‘data1’,‘data2’]]中没有了’key1’,这样是不⾏的,因为这样的意思是我们选取了表格中的’data1’列和’data2’列,但是没有选取’key1’列,这样数据中没有’key1’,是没有办法进⾏划分的。
3、具体应⽤在什么地⽅
上⾯说了很多对于groupby的功能介绍,但是这个东西究竟能⽤在什么地⽅呢?这⾥简单举⼀个例⼦。
现在有⼀个场景,有两家商店1和2,每家商店有a,b,c三种商品,每家商店的每种商品都有各⾃的⽇销售额,现在要快速得到每家商店每种商品的⽉销售额,那么我们就可以使⽤groupby来进⾏操作。
具体的数据如下:
import pandas as pd
df = pd.DataFrame({'shop_id':list('111111222222'),
'item_id':list('abcabcabcabc'),
'item_daysales':list('123456123456')})
df
我们得到的表格具体如下所⽰:
现在我们需要计算每家商店每种商品的⽉销售额,使⽤groupby进⾏操作,具体代码如下:
grouped = df.groupby(['shop_id','item_id']).sum().reset_index()
代码中的第⼀步是使⽤“shop_id”和“item_id”对表格进⾏分类,这样因为商店有两种,商品有三种,对于每⼀家商店都有三种情况,划分后记进⾏求和操作就可以得到每家商店的⽉销售额,代码中的resent_index()的作⽤是保留作为划分的“shop_id”和“item_id”,如果去掉则输出的是另⼀种表格形式。第⼆段代码是对其中的“item_daysale”特征进⾏改名。
这样得到的最后的输出如下如所⽰:
这样便完成了对销售额的⽉总和计算。
如果我们代码中没有输⼊resent_index(),则输出如下所⽰:
这并不是我们想要的输出,我们希望输出的列项有“shop_id”,“item_id”和“item_monthsale”。所以得根据具体需要什么来写代码实现。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。