python dataframe的groupby

dataframe 的 groupby提供了分组,切片,切块的操作,根据一列或者多列进行拆分数据。

对于分组后的数据可以计数,平均值,众数等等。同样通过各种函数还可以进行透视表,交叉表,分位表等等分组的分析

groupby函数:

用法:
 data.groupby(df[‘key’])
返回值:
 dataframe重构数据,且key会变成新的索引,可以dic(list())转为字典通过key查看。

测试案例

生成dataframe数据

import pandas as pd
import numpy as np
df = pd.DataFrame({'key1':list('aacca'),
                    'key2':[1,2,3,2,2],
                    'data1':[2,4,7,5,3],
                    'data2':[1 for i in range(5)],
                    'data3':np.random.randn(5)
    
})
df
key1key2data1data2data3
0a121-2.150799
1a2411.751041
2c3710.902273
3c2510.886773
4a2310.489002

df[‘data1’].groupby(df[‘key’])

对df中的一列数据根据key进行分组.

groupby后数据转为字典

gb = df['data1'].groupby(df['key1'])
gb_dic = dict(list(gb))
gb_dic
{'a': 0    2
 1    4
 4    3
 Name: data1, dtype: int64,
 'c': 2    7
 3    5
 Name: data1, dtype: int64}

对data1通过key1分组求值

gb1 = df['data1'].groupby(df['key1'])
gb1.mean()
gb1.max()
gb1.sum()

<pandas.core.groupby.generic.SeriesGroupBy object at 0x000001F10CF6DD88>

对data1通过key1,key2分组

df.groupby([Series1,Series2]),其中,Series1可以是df[‘key1’],也可以是np.array()

gb2 = df['data1'].groupby([df['key1'],df['key2']])
gb2.sum()
key1  key2
a     1       2
      2       7
c     2       5
      3       7
Name: data1, dtype: int64
gb2 = df['data1'].groupby([np.array([2001,2002,2003,2001,2003]),df['key2']])
gb2.sum()
      key2
2001  1       2
      2       5
2002  2       4
2003  2       3
      3       7
Name: data1, dtype: int64

.groupby(‘key’)

直接对key进行分组,这样对所有的数值列都进行聚合,如果有非数值列,则不进行计算,丢掉该列。

# key1是非数值列,所以通过key2分组后,对于key1那一列不进行聚合
gb3 = df.groupby('key2')
gb3.sum()
data1data2data3
key2
121-2.150799
21233.126817
3710.902273
# key2是数值列,所以通过key1分组后进行聚合
gb3 = df.groupby('key1')
gb3.sum()
key2data1data2data3
key1
a5930.089244
c51221.789047

对行分组

默认对列(axis=0)进行分组,如果需要,也可以对行分组(axis=1)

gb4 = dict(list(df.groupby(df.dtypes,axis=1)))

gb4
{dtype('int64'):    key2  data1  data2
 0     1      2      1
 1     2      4      1
 2     3      7      1
 3     2      5      1
 4     2      3      1,
 dtype('float64'):       data3
 0 -2.150799
 1  1.751041
 2  0.902273
 3  0.886773
 4  0.489002,
 dtype('O'):   key1
 0    a
 1    a
 2    c
 3    c
 4    a}
  • 3
    点赞
  • 12
    收藏
  • 打赏
    打赏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页
评论

打赏作者

Weiyaner

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值