博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python Pandas分组聚合
阅读量:4560 次
发布时间:2019-06-08

本文共 3492 字,大约阅读时间需要 11 分钟。

Pycharm 鼠标移动到函数上,CTRL+Q可以快速查看文档,CTR+P可以看基本的参数。

apply(),applymap()和map()

apply()和applymap()是DataFrame的函数,map()是Series的函数。

apply()的操作对象是DataFrame的一行或者一列数据,applymap()是DataFrame的每一个元素。map()也是Series中的每一个元素。

apply()对dataframe的内容进行批量处理, 这样要比循环来得快。如df.apply(func,axis=0,.....) func:定义的函数,axis=0时为对列操作,=1时为对行操作。

map()和python内建的没啥区别,如df['one'].map(sqrt)。

import numpy as npfrom pandas import Series, DataFrameframe = DataFrame(np.random.randn(4, 3),                  columns = list('bde'),                  index = ['Utah', 'Ohio', 'Texas', 'Oregon'])print frameprint np.abs(frame)printf = lambda x: x.max() - x.min()print frame.apply(f)print frame.apply(f, axis = 1)def f(x):    return Series([x.min(), x.max()], index = ['min', 'max'])print frame.apply(f)printprint 'applymap和map'_format = lambda x: '%.2f' % xprint frame.applymap(_format)print frame['e'].map(_format)

Groupby

Groupby是Pandas中最为常用和有效的分组函数,有sum()、count()、mean()等统计函数。

groupby 方法返回的 DataFrameGroupBy 对象实际并不包含数据内容,它记录的是df['key1'] 的中间数据。当你对分组数据应用函数或其他聚合运算时,pandas 再依据 groupby 对象内记录的信息对 df 进行快速分块运算,并返回结果。

df = DataFrame({'key1': ['a', 'a', 'b', 'b', 'a'],                'key2': ['one', 'two', 'one', 'two', 'one'],                'data1': np.random.randn(5),                'data2': np.random.randn(5)})grouped = df.groupby(df['key1'])print grouped.mean()
df.groupby(lambda x:'even' if x%2==0 else 'odd').mean() #通过函数分组

  

聚合agg()

对于分组的某一列(行)或者多个列(行,axis=0/1),应用agg(func)可以对分组后的数据应用func函数。例如:用grouped['data1'].agg('mean')也是对分组后的’data1’列求均值。当然也可以同时作用于多个列(行)和使用多个函数上。

df = DataFrame({'key1': ['a', 'a', 'b', 'b', 'a'],                'key2': ['one', 'two', 'one', 'two', 'one'],                'data1': np.random.randn(5),                'data2': np.random.randn(5)})grouped = df.groupby('key1')print grouped.agg('mean')         data1     data2key1                    a     0.749117  0.220249b    -0.567971 -0.126922

apply()和agg()功能上差不多,apply()常用来处理不同分组的缺失数据的填充和top N的计算,会产生层级索引。

而agg可以同时传入多个函数,作用于不同的列。

df = DataFrame({'key1': ['a', 'a', 'b', 'b', 'a'],                'key2': ['one', 'two', 'one', 'two', 'one'],                'data1': np.random.randn(5),                'data2': np.random.randn(5)})grouped = df.groupby('key1')print grouped.agg(['sum','mean'])print grouped.apply(np.sum)  #apply的在这里同样适用,只是不能传入多个,这两个函数基本是可以通用的。
data1               data2                     sum      mean       sum      meankey1                                        a     2.780273  0.926758 -1.561696 -0.520565b    -0.308320 -0.154160 -1.382162 -0.691081
data1     data2 key1       key2key1                                    a     2.780273 -1.561696  aaa  onetwooneb    -0.308320 -1.382162   bb     onetwo

apply和agg功能上基本是相近的,但是多个函数的时候还是agg比较方便。

apply本身的自由度很高,如果分组之后不做聚合操作紧紧是一些观察的时候,apply就有用武之地了。

print grouped.apply(lambda x: x.describe())               data1     data2key1                          a    count  3.000000  3.000000     mean  -0.887893 -1.042878     std    0.777515  1.551220     min   -1.429440 -2.277311     25%   -1.333350 -1.913495     50%   -1.237260 -1.549679     75%   -0.617119 -0.425661     max    0.003021  0.698357b    count  2.000000  2.000000     mean  -0.078983  0.106752     std    0.723929  0.064191     min   -0.590879  0.061362     25%   -0.334931  0.084057     50%   -0.078983  0.106752     75%    0.176964  0.129447     max    0.432912  0.152142

此外apply还能改变返回数据的维度。

http://pandas.pydata.org/pandas-docs/stable/groupby.html

此外还有透视表pivot_table ,交叉表crosstab ,但是我没用过。

 

转载于:https://www.cnblogs.com/zephyr-1/p/5874678.html

你可能感兴趣的文章
使用Nginx、Keepalived构建文艺负载均衡
查看>>
phpmyadmin 开放远程登录的权限
查看>>
linux安装gcc和gcc-c++
查看>>
qq登陆错误提示
查看>>
bzoj 1192: [HNOI2006]鬼谷子的钱袋 思维 + 二进制
查看>>
没写完,没调完,咕咕咕的代码
查看>>
Android Studio使用技巧:导出jar包
查看>>
Problem E. TeaTree - HDU - 6430 (树的启发式合并)
查看>>
Kafka序列化和反序列化与示例
查看>>
win10下VS2010中文输入法切换为英文卡死
查看>>
retinex相关代码汇总
查看>>
Cortex-M3 异常返回值EXC_RETURN
查看>>
kettle 转换字段遇到问题(couldn't get row from result set)——摘
查看>>
nginx首页根据IP跳转
查看>>
【2019-08-20】有点目标,有点计划,有点目的
查看>>
【2019-09-10】美,真的跟年龄无关
查看>>
【2019-09-28】少,但更好
查看>>
【2019-09-13】耐心观察是一种技能
查看>>
mysql数据库2-常用命令
查看>>
安卓开发环境搭建(转)
查看>>