前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >破周三,前不着村后不着店的,只好学pandas了,你该这么学,No.9

破周三,前不着村后不着店的,只好学pandas了,你该这么学,No.9

作者头像
梦想橡皮擦
发布2019-06-19 19:32:05
6790
发布2019-06-19 19:32:05
举报

周三了,一个星期最难的一天

大中间的,今天还这么热

5月份,36度的高温

天空飘过几个字

屋里学pandas最得劲

Groupy DataFrame with Index Levels and Columns

说白了就是通过index和columns混合分组

例子走起,(不赶紧写例子,都不知道要怎么解释啦)

代码语言:javascript
复制
import pandas as pd

arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],
          ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]

index = pd.MultiIndex.from_arrays(arrays=arrays,names=['first','second'])

df = pd.DataFrame({'A':[3,1,4,5,9,2,6,1],
                   'B':[1,1,1,1,2,2,3,3]},index=index)


print(df)

有例子,就有例子展示,对吧

代码语言:javascript
复制
              A  B
first second      
bar   one     3  1
      two     1  1
baz   one     4  1
      two     5  1
foo   one     9  2
      two     2  2
qux   one     6  3
      two     1  3

接下来,大招展示的环节的

我要按照second的index索引和B列进行分组

代码先行一步,效果稍后就来

代码语言:javascript
复制
grouped = df.groupby([pd.Grouper(level=1),'B']).sum()
print(grouped)

注意看到groupby里面有两个值,一个是pd.Grouper(level=1) 这个为second的index 第二个为B columns

在这里插入图片描述
在这里插入图片描述

手太抖了,没画好,灵魂画手

主要就是为了让你看明白,分组是怎么计算的哦~

当然,你也可以通过index的名字进行分组

代码语言:javascript
复制
df.groupby([pd.Grouper(level='second'), 'A']).sum()

和上面的效果是一样一样的

甚至,我们可以直接简写成

代码语言:javascript
复制
df.groupby(['second', 'A']).sum()

分组之后的数据可以选择部分,也可以迭代

这个部分,其实我们已经实现过了

再拿出来,重温一下

代码语言:javascript
复制
df = pd.DataFrame({'A':['bar', 'bar', 'foo', 'foo', 'foo', 'foo', 'foo'],
                   'B':['one', 'two', 'one', 'two', 'one', 'two', 'three'],
                   'C':[3,1,4,5,9,2,6],
                   'D':[1,1,1,1,2,2,3]})


print(df)

grouped = df.groupby('A')

for name,group in grouped:
    print(name)
    print(group)

看到分组的名字分别是bar和foo,熟悉吧,常规操作

迭代的时候,用for in 循环即可

代码语言:javascript
复制
bar
     A    B  C  D
0  bar  one  3  1
1  bar  two  1  1
foo
     A      B  C  D
2  foo    one  4  1
3  foo    two  5  1
4  foo    one  9  2
5  foo    two  2  2
6  foo  three  6  3

如果按照多keys分组,例如groupby(['A','B'])

它会自然而然的形成一个元组name

在这里插入图片描述
在这里插入图片描述

可以迭代,就可以部分选择,上篇博客有哦!

代码语言:javascript
复制
bars = grouped.get_group('bar') # 通过分组的名字
print(bars)

另一个呢?

代码语言:javascript
复制
df.groupby(['A', 'B']).get_group(('bar', 'one'))

唉,对喽,这么写,就比较对了

难度系数的大了,要来了,聚合函数

首先看一下内置的聚合函数

代码语言:javascript
复制
sum(), mean(), max(), min(), count(), size(), describe()

竟然才这么几个,那是因为我没写全

在这里插入图片描述
在这里插入图片描述

这个咱们已经操作很多次了

接下来可以看一个高级一些的

代码语言:javascript
复制
可自定义函数,传入agg方法中

我们还是通过刚才的数据进行分析

代码语言:javascript
复制
    A      B  C  D
0  bar    one  3  1
1  bar    two  1  1
2  foo    one  4  1
3  foo    two  5  1
4  foo    one  9  2
5  foo    two  2  2
6  foo  three  6  3

按照A和B进行分组 A有2个值,B有3个值,所以分组之后形成5组

看清楚,不要眨眼,操作来了

代码语言:javascript
复制
grouped = df.groupby(['A','B'])
print(grouped.agg('mean'))
在这里插入图片描述
在这里插入图片描述

思路转换,单列求平均值

代码语言:javascript
复制
grouped = df.groupby(['A','B'])
print(grouped['C'].agg('mean'))

继续思路转换,给单列多个聚合函数

代码语言:javascript
复制
print(grouped['C'].agg(['mean','sum']))

很厉害,学到了吧

在这里插入图片描述
在这里插入图片描述

继续来,不要怕,求多种聚合运算的同时更改列名

代码语言:javascript
复制
print(grouped['C'].agg([('A','mean'),('B','max')]))
在这里插入图片描述
在这里插入图片描述

不同的列运用不同的聚合函数

代码语言:javascript
复制
print(grouped.agg({'C':['sum','mean'],'D':['min','max']}))
在这里插入图片描述
在这里插入图片描述

这些都是agg干的,我还可以继续编哦~

groupby中,可以修改成无索引形式 注意核心加了一个参数as_index=False

代码语言:javascript
复制
grouped = df.groupby(['A','B'],as_index=False)

print(grouped.agg({'C':['sum','mean'],'D':['min','max']}))
在这里插入图片描述
在这里插入图片描述

最后一个操作,agg里面是可以使用自定义的聚合函数

一般,都是这个案例,我呢,当然不能例外啦

代码语言:javascript
复制
grouped = df.groupby('A')

def max_min(group):
    return group.max()-group.min()

print(grouped.agg(max_min))

agg(自定义的函数)

这个地方的自定义函数,还支持lambda的哦~

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-06-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 周三了,一个星期最难的一天
  • Groupy DataFrame with Index Levels and Columns
  • 分组之后的数据可以选择部分,也可以迭代
  • 难度系数的大了,要来了,聚合函数
  • 最后一个操作,agg里面是可以使用自定义的聚合函数
相关产品与服务
云函数
云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助您在无需购买和管理服务器的情况下运行代码。您只需使用平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。云函数是实时文件处理和数据处理等场景下理想的计算平台。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档