pandas:解决groupby().apply()方法打印两次_weixin_30687587的博客-程序员宅基地

技术标签: python  

对于以下dataframe执行dataframe.groupby(['name', 'course']).apply(lambda x: test(x)) 操作

其中test(x)函数为:

def test(x):
    print(x)

那么打印结果为:

可以发现,groupby()后的第一个结果被打印了两次。

对于这种情况,Pandas官方文档的解释是:

什么意思呢?就是说,apply在第一列/行上调用func两次,以决定是否可以进行某些优化。

而在pandas==0.18.1以及最新的pandas==0.23.4中进行尝试后发现,这个情况都存在。

在某些情境,例如对groupby()后的dataframe进行apply()批处理,为了避免重复,我们并不想让第一个结果打印出两次。

方法一:

如果能对apply()后第一次出现的dataframe跳过不处理就好了。

这里采用的方法是设置标识符,通过判断标识符状态决定是否跳过。代码如下:

global flag
flag = False


def test(x):
    global flag
    if flag == False:
        flag = True
        return
    print(x)

测试结果为:

可以发现重复的dataframe已经跳过不再打印,问题顺利地解决~

方法二:

在上面的分析中,已经找了问题的原因是因为apply()方法的引入。那么,有没有可以代替apply()方法呢?这里可以采用filter()方法,即用groupby().filter() 代替groupby().apply()。具体代码如下:

def test(x):
    print(x)

df.groupby(['name', 'course']).filter(lambda x: test(x))

打印出测试结果,也ok~

 

转载于:https://www.cnblogs.com/wkang/p/10150401.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30687587/article/details/96301608

智能推荐

sqoop 1.x 整合mysql jdbc_大漠孤烟BLOG的博客-程序员宅基地

1、安装成功后,需要整合mysql 进行数据的读取。[[email protected] lib]# cp mysql-connector-java-8.0.17.jar /data/bigData/sqoop/sqoop-1.4.7/lib/2、进行测试:sqoopWarning: /data/bigData/sqoop/sqoop-1.4.7/../accumulo does not...

IPhone通过USB通信_xiedu7186的博客-程序员宅基地_ios usb通信

现在我有个需要,需要通过USB让IPhone和电脑进行通信。 peertalk 这个类库可以让IPhone和MAC电脑通过USB使用TCP进行通信,但是要连接windows电脑该怎么处理呢?你们有没有弄过类似这样的东西?

哈希表(HashMap)的学习与实现_笨笨在努力的博客-程序员宅基地_哈希表怎么实现

1.哈希表的起源?首先我们来分析一下从一组数据中查找某个元素的效率:如果顺序查找,则需要从头开始查找,时间复杂度为O(N);即使用刚学的BST进行查找,时间复杂度也为O(log N)

图标字体制作工具栏_github_32745597的博客-程序员宅基地

图标字体图标字体是字体文件,使用符号(如箭头等)代替数字文字字符。相对于使用背景图片制作图标的方法,使用图标字体具有如下优点减少HTTP请求,节约性能增加灵活性,可以为图标添加字体样式(如改变颜色、使用font-size改变字体大小)使用图标字体也有一些劣势,如版权限制,自己制作图标字体花费时间较长用图标字体制作的页面html/css结构要比使用背景图片复杂使用图标字体实现工具栏从ic

在android如何使用ContentProvider_Ada168855的博客-程序员宅基地

Android中内置了一些content providers是属于公开的数据类型,比如audio(声音)、video(视频)、images(图像)、 personal contact information(通讯录)等。那么如何使用Content Provider呢?下面简单介绍一下:实现Android.provider package,并使用以下四种方式来增删改查Content Provid

随便推点

[licode] 新版本 中信令通道改变_等风来不如迎风去的博客-程序员宅基地

script.js:74 Selected Room basicExampleRoom of type erizoscript.js:112 [bs]createToken callback :eyJ0b2tlbklkIjoiNWViY2JkOTVjMzQ0NDdlYzg4MzY3OTYwIiwiaG9zdCI6IjE3Mi4xOS43LjE2MDo4MDgwIiwic2VjdXJlIjpmYWxzZSwic2lnbmF0dXJlIjoiT0dFNVlqRXhPREppTm1RME1UQmpOR...

一招教你如何选工业机器人视觉!_工业机器视觉前沿的博客-程序员宅基地

工业机器人的眼睛视觉系统通常由以下构成 01摄像头和光学部件这一类通常含有一个或多个摄像头和镜头(光学部件),用于拍摄被检测的物体。根据应用,摄像头可以基于如下标准,黑白、复合彩色(Y/C),RGB彩色,非标准黑白(可变扫描),步进扫描(progressive-scan)或线扫描。02灯光灯光用于照亮部件,以便从摄像头中拍摄到更好的图像,灯光系统可以在不同形状、尺寸...

数据处理遇到的问题_拙小拙的博客-程序员宅基地

Python3解决UnicodeDecodeError: ‘utf-8’ codec can’t decode byte…问题 终极解决方案python pandas.errors Buffer overflow caught - possible malformed input file.和\r\n

常用的安全CRT函数_Hustudent20080101的博客-程序员宅基地

常用的安全CRT函数常用的安全CRT函数安全CRT(C Runtime Library = C运行时间库)函数,是微软公司对C/C++语言的扩展。它在原来函数名后添加了“_s”后缀;一般返回出错代码;并将原来的函数返回值,作为一个参数,添加到函数输入参数列表的最后;对带缓冲区参数的函数,还添加了表示缓冲区大小的输入参数,以防止内存溢出。在VC05中,如果不使用这些安全性函数,编译器

光驱常见故障_ChinaBB2009的博客-程序员宅基地

光驱常见故障分析       故障一、进入系统以后找不到光驱盘符故障现象:系统自检时能够检测到光驱,但在Windows操作系统下却没有发现光驱盘符。故障分析:出现这种情况的可能性主要有几种:在安全模式下进入了操作系统、机器感染了病毒、Windows操作系统自带的光驱驱动程序失效。解决方法:由于在安全模式下的操作系统不加载任何驱动程序,因此找不到光

[PAT乙级]1036 跟奥巴马一起编程_唐火的博客-程序员宅基地

美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014 年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。现在你也跟他一起画吧!输入格式:输入在一行中给出正方形边长 N(3≤N≤20)和组成正方形边的某种字符 C,间隔一个空格。输出格式:输出由给定字符 C 画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的 50%(四舍五入取整)。输入样例:1