原标题:Pandas之分组计算

本文作者:杨长青

本文编辑:杨慧琳

技术总编:张学人

好消息!!!爬虫俱乐部将于2019年5月2日至4日在武汉举行Stata编程技术五一训练营,此次采用理论与案例相结合的方式,旨在帮助大家熟悉Stata数据分析技巧,能够通过编程读取不同类型的数据源、实现复杂数据合并、清洗的程序化,并且熟悉Stata核心的爬虫技术。

在数据处理过程,我们经常会用到分组计算。在Stata中,我们可以使用 by 或者 egen 命令,而在Python中如何处理DataFrame数据结构呢?今天我们将介绍Pandas里的两个分组函数 groupby() 以及 apply() 。

我们以auto数据为例,首先执行如下程序:

import pandas aspd

auto=pd.read_stata(r"E:python程序pandasauto.dta") #读入dta文件

auto.head() #展示前五行

数据集的前五行如下:

如果我们想要按照foreign来计算价格的均值数,可以直接使用 groupby(“foreign”) 进行分组,然后使用 mean() 函数计算中位数,形式如下:

price_m=auto.groupby("foreign")["price"].mean()

print(price_m)

输出的是一个series格式的数据:

接下来我们想做的是想要生成一列变量price_m,当属于国产时price_m等于国产车价格的均值;当属于进口时,price_m等于进口车价格的均值。下面我们将price_m使用merge合并到auto数据集(数据集的合并函数merge、join、concat不是本节重点,我们将在之后进行介绍):

auto=auto.merge(price_m,on="foreign") #将price_m并到auto中,按是否进口合并

auto.rename(columns={"price_x":"price","price_y":"price_m"},inplace=True) #重命名由于合并auto的price被命名为price_x,price_m被命名为price_y

auto.head()

这样,我们便将均值数据与原数据集进行了合并:

以上是对单个变量的分组计算,但面对两个及以上变量时,该如何处理呢?这里只需将列标签设置为列表形式,程序如下:

price_m2=auto.groupby(["mpg","foreign"])["price"].mean()

auto=auto.merge(price_m2,on=["foreign","mpg"]) #将price_m2并到auto中,按是否进口合并

auto.rename(columns={"price_x":"price","price_y":"price_m2"},inplace=True) #重命名

auto.head()

输出结果如下:

当然上述方法也适用于其他分组情况,除了后接 mean() 求均值,还能接更多的函数:medain()、max()、min()、size()、sd()等。但若想要自定义函数该如何处理呢?这里我们可使用上文提及的 apply() 函数。其定义如下:

DataFrame.apply(func,axis =0)

func:我们定义的函数名。

axis:axis=0表示将函数应用于每列;axis=1表示将函数应用于每行。

倘若我们想实现按foreign分类后,每组组内按顺序排列。如果不使用 apply() 函数,即执行:

auto.groupby('foreign').sort_values('price')

此时出现报错,提醒我们sort_values这个函数不适用于groupby(),我们再次尝试使用 apply() 函数。如下:

def sort(group):

group=group.sort_values("price")

returngroup#定义一个排序函数,返回按价格升序后的对象

auto.groupby('foreign').apply(sort) #分组后应用排序函数

输出结果也正是我们所需要的:

相比前面介绍的后接函数,apply() 能够保证原数据的前提下把分组后求得的和与原数据合并,就不用像前面一样再使用merge将分组计算的结果并到原数据集中了。比如我们用 apply() 依据foreign分组,再计算均值,则可直接执行如下程序:

defmean(df):

df['price_mean'] = df["price"].mean()

returndf #定义对分组后的对象求均值函数

auto.groupby('foreign').apply(mean) #调用mean()函数

输出结果:

这样是不是更加便捷呢?由于 apply() 可依据自身需求定义函数,因此几乎能覆盖分组计算的各类情况。例如,我们按foreign分组,判断各个车型价格是否大于该组的均值,如下:

def fun(df):

df['price_mean']=df["price"]>= df["price"].mean()

returndf

auto.groupby('foreign').apply(fun)

最终结果如下:

以上就是 groupby() 和 apply() 在分组计算中的主要用法。大家在学习Pandas的过程中若遇到问题,也欢迎通过邮件与我们探讨。

关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。

投稿要求:

1)必须原创,禁止抄袭;

2)必须准确,详细,有例子,有截图;

注意事项:

1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。

2)邮件请注明投稿,邮件名称为“投稿+推文名称”。

3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。返回搜狐,查看更多

责任编辑:

pandas分组计算平均值_Pandas之分组计算相关推荐

  1. pandas分组计算平均值_pandas索引,分组计算

    索引 1.行索引 #看一个一维数组的索引 s=pd.Series(np.random.randn(5),index=list('abcde')) s s.index#Series的索引 s.index ...

  2. python使用pandas计算dataframe中每个分组的分位数极差、分组数据的分位数极差(range)、使用groupby函数和agg函数计算分组的两个分位数

    python使用pandas计算dataframe中每个分组的分位数极差.分组数据的分位数极差(range).使用groupby函数和agg函数计算分组的两个分位数 目录

  3. python使用pandas计算dataframe中每个分组的极差、分组数据的极差(range)、使用groupby函数和agg函数计算分组的最大值和最小值

    python使用pandas计算dataframe中每个分组的极差.分组数据的极差(range).使用groupby函数和agg函数计算分组的最大值和最小值 目录

  4. pandas使用groupby函数和describe函数计算不同分组的描述性统计(descriptive statistics of each group in dataframe)

    pandas使用groupby函数和describe函数计算不同分组的描述性统计(descriptive statistics of each group in dataframe) 目录

  5. pandas使用groupby函数和cumsum函数计算每个分组内的数值累加值、并生成新的dataframe数据列( cumulative sum of each group in dataframe

    pandas使用groupby函数和cumsum函数计算每个分组内的数值累加值.并生成新的dataframe数据列( cumulative sum of each group in dataframe ...

  6. pandas使用goupby函数和nunique函数计算每个分组对应的多个变量的独特值的个数( unique values of each group in dataframe)

    pandas使用goupby函数和nunique函数计算每个分组对应的多个变量的独特值的个数( unique values of each group in dataframe) 目录

  7. python筛选数据求均值_Python Pandas实现数据分组求平均值并填充nan的示例

    Python实现按某一列关键字分组,并计算各列的平均值,并用该值填充该分类该列的nan值. DataFrame数据格式 fillna方式实现 groupby方式实现 DataFrame数据格式 以下是 ...

  8. 使用numpy和pandas计算平均值、方差、标准差

    使用numpy和pandas计算平均值.方差.标准差 numpy和pandas都可以实现计算平均值.方差.标准差.但numpy默认的是总体方差,pandas默认的样本方差,即分母是n-1,是总体的无偏 ...

  9. R语言使用aov函数进行单因素协方差分析(One-way ANCOVA)、使用effects包中的effect函数来计算调整后的分组均值(calculate adjusted means)

    R语言使用aov函数进行单因素协方差分析(One-way ANCOVA).使用effects包中的effect函数来计算调整后的分组均值(effects library to calculate ad ...

  10. 常规-分组-深度分离-分组深度分离卷积-参数量-计算量-dilation-python实现

    不同的卷积操作 本文所用样本 一般的卷积(常规的) 分组卷积 深度分离卷积 逐通道卷积(depthwise conv) 逐点卷积 (pointwise conv) 分组深度分离卷积 上面卷积总结 卷积 ...

最新文章

  1. 后台ajax调用中字符串到jquery中的json对象和数组对象转换问题
  2. 计算机科学与技术单片机55,关于计算机技术与科学专业的考研信息
  3. Android APP终极瘦身指南
  4. putty保存用户名和密码_使用PuTTY远程登录软件登录 Linux 实例
  5. 关联数组不能转化为JSON字符串
  6. 如何将两部手机内容互换_什么是内容营销?如何将内容营销做到深入人心?
  7. ASP.NET Core 2.1 : 十二.内置日志、使用Nlog将日志输出到文件
  8. 《高效团队开发:工具与方法》
  9. MAC 安装 Redis 客户端
  10. win7小工具打不开_有了这个工具,小白也能设置一键网络共享文件夹与打印机...
  11. J-Trace入门系列1:感动人心的功能与更感动人心的售价
  12. 星际争霸2中文版下载 – 即时战略游戏超大作 (繁体含中文语音)
  13. creo三维生成二维图_proe5.0三维图转二维图
  14. ValueError: Cannot have number of splits n_splits=3 greater than the number of samples: 1
  15. 二分类资料校准曲线calibration curve的绘制
  16. 解决springboot项目部署时视上传视频太大导致的内存溢出问题
  17. [MAC各类右键菜单修改]Automator WorkFlow: 扩展右键菜单
  18. 【图像超分辨】RDN
  19. 对称加密、非对称加密和散列算法
  20. 【转】Axure RP 9 最新版授权码(亲测有效)

热门文章

  1. 国内首款红外测温5G手机;华为5G汽车模组正式商用;台湾发放首张5G牌照
  2. 植物大战僵尸C语言修改器
  3. python正确判断错误_python之错误、调试和测试
  4. 学python看小甲鱼还是黑马_为什么我看完小甲鱼的python视频还是不会写呢?
  5. 程序员突然倒地!中软回应称系低血糖引发
  6. 流程即代码:云研发、低代码 IDE —— Uncode
  7. 软件设计和开发规范(国标)
  8. RocketMQ(消息中间件)
  9. 计算机桌面文字重影,电脑桌面字有重影怎么办
  10. PyQt5_pyqtgraph股票MACD指标