pandas 实现分组后取第N行
作者:NoOne-csdn 发布时间:2023-02-09 11:11:40
目的:
把question_id 对应的user_answer转成ABCD
solution
dfa=df.groupby('question_id').nth(0).reset_index()
dfa['flag']='A'
dfb=df.groupby('question_id').nth(1).reset_index()
dfb['flag']='B'
dfc=df.groupby('question_id').nth(2).reset_index()
dfc['flag']='C'
dfd=df.groupby('question_id').nth(3).reset_index()
dfd['flag']='D'
resdf=dfa.append([dfb,dfc,dfd])
resdf.sort_values(by='question_id')
result
:
focus
:
g.nth(0)
#同
g.first()
g.head(1)
g.last()
g.nth(2)
g.nth(-1)
g.nth(0,dropna='any')
g.B.nth(0,dropna='all')
g.groups
g.get_group(134429)
g.discribe()
g.agg([np.mean,np.sum.np,std])
补充:pandas的分组取最大多行并求和函数nlargest()
在pandas库里面,我们常常关心的是最大的前几个,比如销售最好的几个产品,几个店,等。之前讲到的head(), 能够看到看到DF里面的前几行,如果需要看到最大或者最小的几行就需要先进行排序。max()和min()可以看到最大或者最小值,但是只能看到一个值。
所以我们可以使用nlargest()函数,nlargest()的优点就是能一次看到最大的几行,而且不需要排序。缺点就是只能看到最大的,看不到最小的。
我们来看看单价排在前十的数据:
单价排在前十的数据
nlargest()的第一个参数就是截取的行数。第二个参数就是依据的列名。
这样就可以筛选出单价最高的前十行,而且是按照单价从最高到最低进行排列的,所以还是按照之前的索引。
还可以按照total_price来进行排名:
按照total_price排名
nlargest还有一个参数,keep='first'或者'last'。当出现重复值的时候,keep='first',会选取在原始DataFrame里排在前面的,keep='last'则去排后面的。
由于nlagerst()不能去最小的多个值,如果我们一定要使用这个函数进行选取也是可以的.
先设置一个辅助列:
先设置一个辅助列
然后在进行选取:
以辅助列进行选取
当然了,也可以通过head()加上排序进行选取的。
那以前这些操作都可以通过其它函数来进行替代的话,nlargest()有什么必要介绍吗?或者说学不学这个函数有什么关系吗?
这就是我们今天要重点介绍的,如果说要选择不同location_road下的前五名要怎么操作呢?
很多人可能第一反应会想到先分组然后进行max()操作,但是这样的操作只能选择最大的一列:
使用max()
但是使用max有一个问题,就是选取的是每一列的最大值,而不是选取最大值的那一行,也就是说只能在选取单列的最大值的时候才是准确的。
这个时候我们就要想到apply和lambda的自定义函数了:
选取多个指标的TOP(N)
这样就选出了不同loaction_road的price排在前五的行了。
nlargest()函数在这种场景下使用是非常方便的,而且结果也已经默认排好顺序了。
还有一些场景下需要计算分组的前几名,然后在进行求和的,这个我们也可以使用nlargest进行操作:
分组之后进行求和
使用这种方法会出现报错提示,这个因为在列和索引都存在loaction_road,有重复,系统有警告,在实际使用时可以先改列名再操作。我们也可以换一种方式直接按照索引进行求和,这样就没有警告了:
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。
来源:https://blog.csdn.net/weixin_40161254/article/details/90598574
猜你喜欢
- ASP * 页制作中连接Oracle数据库的例子,下面这段代码能够显示,当前用户所能够看到的所有的用户和表,有兴趣的, 可以把每个表的内容上
- 本文是小编日常收集整理些js经典实例,特此分享供大家参考!跨浏览器添加事件//跨浏览器添加事件function addEvent(obj,t
- position属性可以让你让你随意控制一个特定元素在浏览器何处以及如何显示。比方说我们用position:fixed 让一个图片显示在浏览
- 基本上是因为jupyter notebook的kernel所用的python和命令提示符中的python环境不一样。首先分别在cmd和jup
- 本文介绍了在js和asp中使用FileSystemObject(fso)来: 创建、添加或删除数据,以及读取文件; 移动、复制和删除文件;创
- 很久没写过东西了,今天看了chinahuman 的《用asp自动解析网页中的图片地址,并将其保存到本地服务器》,于是优化了这个程序,并且将所
- 相比SQL Server 2000提供的FOR XML查询,SQL Server 2005版本对现有功能增强的基础上增加了不少新功能,最为吸
- 写好脚本,注册好服务之后,经测试,ORACLE可以随RHEL启动而启动,但不能随系统关闭而关闭。在网上找答案,发现几乎所有的设置过程帖子都是
- 尾递归是一种特殊的递归形式,它在递归调用时不会产生新的栈帧,从而避免了栈溢出的问题。Python并没有对尾递归进行优化,但我们可以通过一些技
- SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML, 数据定义语言DDL,数据控制语言DCL。其中用于定义数据的结构,比如 创建
- 本文实例讲述了python实现简单ftp客户端的方法。分享给大家供大家参考。具体实现方法如下:#!/usr/bin/python# -*-
- 上文: 《IE7的web标准之道——1:前言(兼目录)》IE历来被web标准的拥护者所诟病,而当FireFox横空出世以后,更多的网页制作者
- Sjoerd Visscher 发现了一个简洁的 方法 让样式在 IE 中作用到未知的元素上——仅需 JS 创建此未知元素即可:docume
- //-------------------------------------------- // 删除千分点。 //-----------
- 代码如下所示:$num = 10.4567; //第一种:利用round()对浮点数进行四舍五入 &n
- xhtml+css页面制作过程中问题的解决方案,说是解决方案应该有点过了,充其量只不过是给刚刚开始学标准页面制作的朋友们的一些小建议,如果讲
- 代码如下:set fso=server.createobject("scripting.filesystemobject"
- 在软件开发过程中经常会遇到数据库升迁的问题,原因比较多,如acsess访问速度比sql server慢、删除数据记录后access会留下空档
- 问:如何在SQL Enterprise Manager version 6.5下操作SQL Server 6.0的服务器?答:在使用SQL
- 快到 520 了,分享几段 520 专属 Python 代码,不多说了,下面直接上货。No.1效果:主要代码:import tur