【python数据分析】-数据分组和聚合数据分组聚合(一)-分组

python数据分析-数据分组聚合(一)-分组

又开始我的好好学习之旅,今天学习数据分析!
【python数据分析】-数据分组和聚合数据分组聚合(一)-分组
今天要学数据分组和聚合,分组统计在数据分析中运用的比较多,还有数据透视表也是数据分析必备的技能,今天来get一下~
1.数据源

数据源:Python第三方库seaborn(用于绘图)中自带的数据

import numpy as np
from pandas import Series,DataFrame
import pandas as pd
import seaborn as sns
tips = sns.load_dataset('tips')
tips.head()

之前调用这个库都是好好的,今天出现了报错
【python数据分析】-数据分组和聚合数据分组聚合(一)-分组
URLError: <urlopen error [Errno 60] Operation timed out>

大概知道是超时的问题,但是百度了半天没找到原因,有人知道一定要告诉我哇~

只好想别的办法解决这个问题啦~
遇到不会的习惯用??来查看下是不是用错方法了,然后发现这个数据集都在
https://github.com/mwaskom/seaborn-data
【python数据分析】-数据分组和聚合数据分组聚合(一)-分组
找到小费数据:
https://github.com/mwaskom/seaborn-data/blob/master/tips.csv
用pd.read_html获取数据

df = pd.read_html('https://github.com/mwaskom/seaborn-data/blob/master/tips.csv')
tips=df[0]
tips.head()

这个方法返回的是个列表,所以只要取tips[0],就说所需要的数据了
【python数据分析】-数据分组和聚合数据分组聚合(一)-分组
嘤嘤嘤,怎么多了一个“Unnamed: 0”,删掉!

tips = tips.drop('Unnamed: 0',axis=1)
tips.head()

【python数据分析】-数据分组和聚合数据分组聚合(一)-分组
搞定!拿到了数据!就是不知道为什么会报错很难受(╯﹏╰)

2.GroupBy

【python数据分析】-数据分组和聚合数据分组聚合(一)-分组
对源数据按照性别进行分组,发现返回的是一个对象,对该对象调用mean方法即可返回数据
【python数据分析】-数据分组和聚合数据分组聚合(一)-分组

grouped = tips['tip'].groupby(tips['sex'])
grouped.mean()

【python数据分析】-数据分组和聚合数据分组聚合(一)-分组
同样可以通过多个分组键进行分组聚合计算,比如通过day和time计算小费的平均值。
【python数据分析】-数据分组和聚合数据分组聚合(一)-分组
用plot绘制下,可以快速看出数据特点
【python数据分析】-数据分组和聚合数据分组聚合(一)-分组
之前通过
tips.loc[tips['sex']=='Male','tip'].head()
tips.loc[tips['sex']=='Female','tip'].head()

可以分别查看数据情况
其实groupby对象是可迭代的,其构造为一组二元组,groupby由分组名和数据片构成

for name,group in tips.groupby(tips['sex']):
    print(name)
    print(group)

【python数据分析】-数据分组和聚合数据分组聚合(一)-分组

2.1GroupBy按照列名分组

之前的groupby的分组键是Series(tips[‘sex’]),其实groupby的分组键还能支持其他格式,如列索引的列名,但是列名必须是分组的对象的列名,不然会检索不到报错。

for name,group in tips.groupby(tips['sex']):
    print(name)
    print(group)

【python数据分析】-数据分组和聚合数据分组聚合(一)-分组
如果我们不需要这么多列df数据,只想要tip列,通过索引选取即可。但是groupby对象也可通过索引获取tip列,程序员小哥哥们叫他【语法糖】,好可爱的叫法。去查了下:
语法糖就是程序语言中提供[奇技淫巧]的一种手段和方式而已。 通过这类方式编写出来的代码,即好看又好用,好似糖一般的语法。固美其名曰:语法糖
【python数据分析】-数据分组和聚合数据分组聚合(一)-分组

2.2GroupBy按照列表或元组分组

分组键还可以是长度适当的列表和元组,长度是指与待分组的df的行数是一样的!其实就是把列表或者元组当做一列进行分组。

【python数据分析】-数据分组和聚合数据分组聚合(一)-分组

2.2GroupBy按照字典分组
df = DataFrame(np.random.normal(size=(6,6)),
                           index=['a','b','c','A','B','C'])
dic1 = {
    'a':'one',
    'A':'one',
    'b':'two',
    'B':'two',
    'c':'three',
    'C':'three'
}
df.groupby(dic1).sum()

【python数据分析】-数据分组和聚合数据分组聚合(一)-分组

2.2GroupBy按函数分组

其实按照函数分组就是按照列表或字典分组,只不过会更加灵活

df = DataFrame(np.random.randn(4,4))
def zf(x):
   if x >= 0:
       return 'a'
   else:
       return 'b'
df[1].map(zf)
df[1].groupby(df[1].map(zf)).sum()

【python数据分析】-数据分组和聚合数据分组聚合(一)-分组
层次化索引,可以直接写level=1来进行分组,还可以按照列进行索引

df = DataFrame(np.arange(16).reshape(4,4),
             index=[['a','a','b','b'],['aa','bb','aa','bb']],
             columns=[['one','one','two','two'],['oo','tt','oo','tt']])
df

【python数据分析】-数据分组和聚合数据分组聚合(一)-分组
【python数据分析】-数据分组和聚合数据分组聚合(一)-分组