import pandas as pd
# 分组
# 对数据进行分组,对每一组的数据进行计算
# SQL是可以对数据进行分组和过滤的
# Pandas可以通过groupby函数对数据进行更加复杂的分组运算
# 分组运算的过程
# 1.分组 根据某些要求分组
# 2.运算 根据不同的分组数据进行不同的运算
# 3.合并 把每一个分组的运算结果合并在一起
dict_data = {
'key1':['a','b','c','d','a','b','c','d'],
'key2':['one','two','three','four','five','six','seven','eight'],
'data1':[1,2,3,4,5,6,7,8],
'data2':[3,4,6,9,8,6,5,4]
}
# 根据字典创建df对象
df = pd.DataFrame(dict_data)
print(df)
# 按照指定列进行分组
# DataFrameGroupBy 类型的对象,存储分组之后的数据
print(df.groupby('key1'))
print(df.groupby('key1').sum())
print(type(df.groupby('key1').sum()))
# 把某列数据按照另外一列进行分组
# 1.找到要分组的列
print(df['data1'])
# 根据key1这一列进行分组
print(df['data1'].groupby(df['key1']).sum())
group1 = df.groupby('key1')
# size() 查看分组数据个数
print(group1.size())
group2 = df.groupby('key2')
print(group2.size())
# 按照层级索引来分
group1 = df.groupby(['key1','key2'])
print(group1.size())
group2 = df.groupby(['key2','key1'])
print(group2.size())
# groupby对象支持迭代操作
# for循环遍历,遍历出来的是一个元组,元组中存放的是分组名称和分组数据
# 对分组数据进行运算
gtoup2 = df.groupby('key1')
for group_name,group_data in group2:
print(group_name)
print(group_data)
print(type(group_data))
print('*'*50)
group_list = list(group2)
print(group_list)
# 转换为字典
dict(list(group2))
# 按照数据类型来分
print(df.groupby(df.dtypes,axis=1).size())
print(df.groupby(df.dtypes,axis=1).sum())