Pandas简单实现groupby分组统计

Pandas实现groupby分组统计

类似SQL:
select city.max(temperature) from city_weather groupby by city

groupby: 先对数据分组,然后在每个分组上应用聚合函数、转换函数

import pandas as pd
import numpy as np

%matplotlib inline
df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar','foo', 'bar', 'foo', 'foo'],
                'B' : ['one', 'one', 'two', 'three','two', 'two', 'one', 'three'],
                'C' : np.random.randn(8), 
                'D' : np.random.randn(8)})
df
ABCD
0fooone-0.1907411.612948
1barone-0.7812091.002117
2footwo0.858491-0.178429
3barthree-0.2805590.083816
4footwo0.214302-0.107717
5bartwo-0.134638-1.604365
6fooone-2.108731-0.653819
7foothree0.414685-1.717435

1、分组使用聚合函数做数据统计

1、单个列groupby,查询所有数据列的统计

df.groupby('A').sum()
CD
A
bar-1.196406-0.518431
foo-0.811994-1.044452

1、groupby中的A变成了数据的索引列
2、B列不是数字,所以被自动忽略

2、多个列groupby,查询所有数据列的统计

df.groupby(['A','B']).mean()
CD
AB
barone-0.7812091.002117
three-0.2805590.083816
two-0.134638-1.604365
fooone-1.1497360.479564
three0.414685-1.717435
two0.536397-0.143073

(A,B)成对变成了二级索引,不想改变原来索引。加一个as_index=False

df.groupby(['A','B'],as_index=False).mean()
ABCD
0barone-0.7812091.002117
1barthree-0.2805590.083816
2bartwo-0.134638-1.604365
3fooone-1.1497360.479564
4foothree0.414685-1.717435
5footwo0.536397-0.143073

3、同时查看多种数据统计

df.groupby('A').agg([np.sum,np.mean,np.std])
CD
summeanstdsummeanstd
A
bar-1.196406-0.3988020.339116-0.518431-0.172811.322055
foo-0.811994-0.1623991.151755-1.044452-0.208891.204567

列变成了多级索引

4、查看单列的结果数据统计

# 方法1:预过滤,性能更好
df.groupby('A')['C'].agg([np.sum,np.mean,np.std])
summeanstd
A
bar-1.196406-0.3988020.339116
foo-0.811994-0.1623991.151755
#方法2
df.groupby('A').agg([np.sum,np.mean,np.std])['C']
summeanstd
A
bar-1.196406-0.3988020.339116
foo-0.811994-0.1623991.151755

5、不同列使用不同的聚合函数

df.groupby('A').agg({'C':np.sum,'D':np.std})
CD
A
bar-1.1964061.322055
foo-0.8119941.204567
  • 欢迎关注个人公众号
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值