您的位置:首页 > 其它

小白的Pyhon数据分析之路12——数据分组

2019-06-02 16:59 573 查看

我么知道在SQL中有分组的功能,pandas也有。

groupby

在这里,会用到一个小费数据集。它集成在seaborn中。

我们先来导入相关的模块。

import numpy as np
import pandas as pd
from pandas import Series, DataFrame
%matplotlib inline
import seaborn as sns

运用小费数据集。

tips = sns.load_dataset('tips')
tips.head()

head()是只显示前面五条数据。
从上图可以得知,有多项数据,分别是:

列名 内容
total_bill 订单总额
tip 小费金额
sex 顾客性别
smoker 是否吸烟
day 日期
time 午餐\晚餐
size 就餐人数

把tip按照sex分组,grouped是groupby对象。
下面按照day和time分组,求tip的平均数。

data_mean = tips['tip'].groupby([tips['day'], tips['time']]).mean()

把它显示在横向柱状图中。
另外,groupby对象是可以迭代的。

size()方法可以返回各分组的大小。

按列名分组

下面按照列名smoker分组。

这样,还会返回其他组的数据。如果只需要某一列数据,可以使用如下方法。

但是,这样就会显得代码很臃肿,我们可以用一些简化的方法来编写代码。

有了特定的列的数据,就可以简单的绘图了。

按列表或元组分组

新建一个DataFrame对象和一个用于分组的列表。

df = DataFrame(np.arange(16).reshape(4,4))
_list = ['a' ,'b', 'a', 'b']


其实,就是把第一三行和第二四行整合起来了。

按字典分组

同样,新建一个DataFrame对象和一个用于分组的字典。

df = DataFrame(np.random.normal(size=(6,6)), index=['a' ,'b', 'c', 'A', 'B', 'C'])
_dict = {
'a': 'one',
'A': 'one',
'b': 'two',
'B': 'two',
'c': 'three',
'C': 'three',
}

下面就进行分组了。其实就是按照字典的键整合到同一个值中了。

按函数分组

新建一个DataFrame对象和一个用于分组的函数。

df = DataFrame(np.random.randn(4,4))

函数的详细代码是:

def f(x):
if x > 0:
return 'a'
else:
return 'b'

下面利用map()函数进行分组。

对付层次化索引,我们也有办法。新建的DataFrame对象如下图所示:

下面,我一步到位。设置了level参数表示层次;设置了axis参数表示在列上进行分组;在汇总之后还进行了绘图。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: