Pandas-groupby

本文详细介绍了Pandas库中的groupby方法,通过实例展示了如何按照特定列进行数据分组,包括获取分组信息、迭代输出分组、选择分组、聚合运算以及筛选数据等操作。此外,还演示了如何对分组后的数据进行多列分析并进行聚合运算,以及利用filter方法筛选满足条件的分组数据。
摘要由CSDN通过智能技术生成

PANDAS的分组groupby讲解

分布代码演示及结果

import pandas as pd
import numpy as np
df=pd.DataFrame({
    'user':['小明','小李','小赵','小何']
    'gender':['男','女','男','女'],
    'score':[99,95,70,88]
},index=['1','2','3','4'])
print(df)      #创建表格`

在这里插入图片描述

df.groupby('gender')    #按照性别进行分组

输出结果:
{‘女’: [‘2’, ‘4’], ‘男’: [‘1’, ‘3’]}

df.groupby('gender').groups     #获取分组情况

输出结果:
{‘女’: [‘2’, ‘4’], ‘男’: [‘1’, ‘3’]}

grouped=df.groupby('gender')    #迭代输出各个组的情况,#name是分组名,group是数据块
for name,group in grouped:
    print(name)
    print(group)

输出结果:

user gender score
2 小李 女 95
4 小何 女 88

user gender score
1 小明 男 99
3 小赵 男 70

#选择组
grouped.get_group('女')

输出结果

#选择组进行聚合运算
grouped.get_group('女')['score'].agg(np.mean)

输出结果:
91.5

#选择组进行聚合运算
grouped.get_group('女')['score'].agg(np.max)

输出结果:
95

grouped.get_group('女').agg(np.size)#获取分组里的长度

输出结果:
user 2
gender 2
score 2
dtype: int64

df['star']=pd.Series([5,7,4,3],index=['1','2','3','4']) #在df中新添加列
df

在这里插入图片描述

grouped=df.groupby('gender')   
grouped[['score','star']].agg({'score':np.mean,'star':np.sum})#对分组后的对应列进行数据分析

在这里插入图片描述

grouped.agg({'score':np.mean,'star':np.sum})#将分组后的指定列进行指定的数据处理

与上一步相同

df.groupby('gender').filter(lambda x:x['score'].mean()>90)#筛选出大于90的组的所有数据

输出结果

完整代码展示

import pandas as pd
import numpy as np

df=pd.DataFrame({
    'user':['小明','小李','小赵','小何'],
    'gender':['男','女','男','女'],
    'score':[99,95,70,88]
},index=['1','2','3','4'])
df      #创建表格

df.groupby('gender')    #按照性别进行分组

df.groupby('gender').groups#获取分组情况

grouped=df.groupby('gender')    #迭代输出各个组的情况,#name是分组名,group是数据块
for name,group in grouped:
    print(name)
    print(group)

#选择组
grouped.get_group('女')

#选择组进行聚合运算
grouped.get_group('女')['score'].agg(np.mean)

#选择组进行聚合运算
grouped.get_group('女')['score'].agg(np.max)

grouped.get_group('女').agg(np.size)#获取分组里的长度

df['star']=pd.Series([5,7,4,3],index=['1','2','3','4']) #在df中新添加列
df

grouped=df.groupby('gender')   


grouped[['score','star']].agg({'score':np.mean,'star':np.sum})

grouped.agg({'score':np.mean,'star':np.sum})#将分组后的指定列进行指定的数据处理

df.groupby('gender').filter(lambda x:x['score'].mean()>90)#筛选出大于90的组的所有数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值