记录从准研一假期自学PYTHON的全过程day37(pandas分类与聚合)

118 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第27天,点击查看活动详情

也是暑假自学python的第37天

今天继续昨天的学习:

今天学习pandas的分组与聚合

首先进行数据的分组,来进行数据的分析:

import pandas as pd
import numpy as np
dict_obj = {'key1' : ['a', 'b', 'a', 'b', 
                      'a', 'b', 'a', 'a'],
            'key2' : ['one', 'one', 'two', 'three',
                      'two', 'two', 'one', 'three'],
            'data1': np.random.randn(8),
            'data2': np.random.randn(8)}
df_obj = pd.DataFrame(dict_obj)

print(df_obj)
image.png

要进行数据的分组,使用到的语句为groupby:

print(df_obj.groupby('key1'))
print(type(df_obj.groupby('key1')))
print(type(df_obj['data1'].groupby(df_obj['key1'])))

直接print(df_obj.groupby('key1'))并不会有任何结果,只是一个groupby过程,具体还需要聚合。

grouped1 = df_obj.groupby('key1')
print(grouped1)
image.png

聚合:

grouped1 = df_obj.groupby('key1')
print(grouped1.mean()) #不是数值类型的不会算均值

就可以求得平均值,并且将其打印出来:

image.png

按照自定义的关键字进行分组:

#自己定义的key:一共八个数,
self_def_key = [0, 1, 2, 3, 3, 3, 5, 7]
print(df_obj.groupby(self_def_key).size())  #等于mysql的count
print('*'*50)
print(df_obj.groupby(self_def_key).sum())

中间三个分为一组,0,1,2,3,4,5,7组,三个3分为一组:

输出的结果为:

image.png

多层分组:

print(df_obj.groupby([df_obj['key1'], df_obj['key2']]).size())
print('-'*50)
grouped2 = df_obj.groupby(['key1', 'key2'])
print(grouped2.size())

image.png

grouped3 = df_obj.groupby(['key2', 'key1'])
print(grouped3.size()) #series

返回一个series对象

image.png
print(grouped3.mean().index)
print(grouped3.mean().unstack())  #竖变横,只能变为列索引的最大的索引
print(grouped3.mean().unstack().columns)

grouped3.mean().unstack()将行变为竖,输出的结果如下:

image.png