携手创作,共同成长!这是我参与「掘金日新计划 · 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)
要进行数据的分组,使用到的语句为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)
聚合:
grouped1 = df_obj.groupby('key1')
print(grouped1.mean()) #不是数值类型的不会算均值
就可以求得平均值,并且将其打印出来:
按照自定义的关键字进行分组:
#自己定义的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分为一组:
输出的结果为:
多层分组:
print(df_obj.groupby([df_obj['key1'], df_obj['key2']]).size())
print('-'*50)
grouped2 = df_obj.groupby(['key1', 'key2'])
print(grouped2.size())
grouped3 = df_obj.groupby(['key2', 'key1'])
print(grouped3.size()) #series
返回一个series对象
print(grouped3.mean().index)
print(grouped3.mean().unstack()) #竖变横,只能变为列索引的最大的索引
print(grouped3.mean().unstack().columns)
grouped3.mean().unstack()将行变为竖,输出的结果如下: