大数据组组织架构 大数据团队分组
转载
给数据分个班
1、对数据进行分组
单列分组
Pandas提供了一个灵活高效的groupby功能,它使你能以一种自然的方式对数据集进行切片、切块、摘要等操作
而进行分组之后是一个DataFrameGroupBy object,是一个分组后的对象
df.groupby("gender")
但是因为分组之后是一个DataFrameGroupBy object对象,所以可以使用groupby中的size方法查看分组后每组的
数量,并返回一个含有分组大小的Series:
df.groupby("gender").size()
同样我们也可以根据某一个列名对另外一个列进行分组,之后使用get_group()函数根据分组后的名字进行分组,例如:
我们通过性别gender,只对age列数据进行分组
group = df['age'].groupby(df['gender'])
# 查看分组
print(group.groups)
# 根据分组后的名字选择分组
print(group.get_group('F'))
对分组之后的数据进行遍历:
import pandas as pd
df = pd.read_excel('/data/course_data/data_analysis/forbes_2018.xlsx')
groups = df.groupby('gender')
for group_name,group_df in groups:
print(group_name,group_df.shape)
多列分组
在pandas中对于数据进行分组可以实现多列分组,当需要按多列进行分组的时候,groupby方法里面我们
传入的一个列表,列表中分别存储分组依据的列名
示例:
import pandas as pd
df = pd.read_excel('/data/course_data/data_analysis/forbes_2018.xlsx')
group=df.groupby(['country','gender'])
df1 = group.size()
print(df1)
注意:列表中列名的顺序,确定了先按country列进行分组,然后再按gender列分组。不同的顺序,产生的分组
名字是不同的
**group.size()返回的结果中发现索引值是多层的,那么对于多层索引的值我们如何去获取呢?:
import pandas as pd
df = pd.read_excel('/data/course_data/data_analysis/forbes_2018.xlsx')
group=df.groupby(['country','gender'])
df1 = group.size()
size = df1['Austria']['F']
print(size)
2、对分组后的数据进行统计
数据统计(也称为数据聚合)是数据处理的最后一步,通常是要使每一个数组生成一个单一的值
在pandas中提供了很多的统计函数,例如:mean()、max()、min()等函数
为了数据统计起来更加方便灵活,pandas提供了一个agg()方法来对分组之后的数据进行统计
示例:
import pandas as pd
df = pd.read_excel('/data/course_data/data_analysis/forbes_2018.xlsx')
groups = df.groupby('gender')
for group_name,group_df in groups:
f_se = group_df['age'].agg(['max','min','mean'])
print('{}组的最大年龄是{},最小年龄是{},平均年龄是{}'.format(group_name,f_se[0],f_se[1],f_se[2]))
当然在pandas中的函数也不是万能的,如果我们需要计算最大值以及最小值的差值,这样的话我们可以自定义一个函数
来进行计算,之后把函数名放在agg函数后面括号的列表中,示例:
import pandas as pd
df = pd.read_excel('/data/course_data/data_analysis/forbes_2018.xlsx')
groups = df.groupby('gender')
def peak_range(df):
"""
返回数值范围
"""
return df.max() - df.min()
for group_name,group_df in groups:
f_se = group_df['age'].agg(['max','min','mean',peak_range])
print(f_se[0],f_se[1],f_se[3])
注意:peak_range(df)函数是我们自定的函数,并设置了一个df参数,为了接收group_df['age']的值,自定义的函数
名字在传入agg()函数中时不需要转换成字符串


本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。