python对数据进行分组怎么实现_Python--DataFrame分组-GroupBy

本文详细介绍了Python DataFrame的分组功能,包括如何按照一个或多个列进行分组,并进行平均值、大小、数量等统计计算。示例展示了如何使用groupby方法进行分组,以及如何对分组后的数据进行迭代、聚合、转换等操作,同时讲解了如何通过自定义函数对数据进行更复杂的处理。
摘要由CSDN通过智能技术生成

DataFame分组功能及其他配合使用方法

分组统计 👉 GroupBy

#*.groupby(by=None,axis=0,level=None,as_index=True,sort=True,group_keys=True,squeeze=False,observed=False,**kwargs)#axis=0 行 / 1 列

有这样一组数据 :

ContractedBlock.gif

ExpandedBlockStart.gif

df =pd.DataFrame({'key1':['a','a','b','b','a'],'key2':['one','two','one','two','three'],'data1':np.random.randn(5),'data2':np.random.randn(5)

})#-------------------------------#

key1 key2 data1 data2

0 a one-0.205263 1.820120

1 a two 0.436864 -1.858459

2 b one 0.695624 1.134222

3 b two 0.281301 1.735320

4 a three 1.040519 0.657742

View Code

如何对 ‘key1’ 进行 分组 并求 平均值 ?

ass = df['data1'].groupby(df['key1']) #这是一个分组对象,没有进行任何计算

ass.mean() #对"对象" 进行调用方法

#df.groupby('key1').mean()#df[['data1','data2']].groupby('key1').mean()

1813202-20191120201335620-1084182650.png

比较简单 ,呵 ,那么如何对多个'字段'进行分组 ? 要求对 key1 , key2进行分组并计算data2的平均值

ContractedBlock.gif

ExpandedBlockStart.gif

df['data2'].groupby([df['key1'],df['key2']]).mean()#这种分组 只需要将需要的字段放入数组( 也是列表[] )中即可

#---------------------------#

key1 key2

a one1.820120three0.657742two-1.858459b one1.134222two1.735320Name: data2, dtype: float64

View Code

有如下数据 :

city =Series(['北京','长沙','长沙','北京','北京'])

years= Series([2018,2018,2019,2018,2019])#---------------------------#

0 北京1长沙2长沙3北京4北京

dtype: object

02018

1 2018

2 2019

3 2018

4 2019dtype: int64

那么 , 如何用城市 和 年份对 df 进行分组呢?

ContractedBlock.gif

ExpandedBlockStart.gif

df['data1'].groupby([city,years]).mean()#----------------------------#

北京 2018 -0.681558

2019 1.580496长沙2018 -0.112299

2019 -0.498441Name: data1, dtype: float64#分组的键可以是任何长度适当(=len(index))的数组#👆 这个就是将分组键改成了自定义城市和年份 匹配相同的相加求平均值 ,不匹配的不计算#北京的2018相加 求平均 北京2019 相加求平均 . 长沙的也一样

View Code

那又 如何对整个 df 的 key1 分组求平均值?

ContractedBlock.gif

ExpandedBlockStart.gif

df.groupby(['key1']).mean()#👆 自动聚合数值列,忽略 非数值 列

df.groupby([

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值