pandas:解决groupby().apply()方法打印两次
2018-12-20 20:25
211 查看
对于以下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~
相关文章推荐
- 2000/xp打印连接数超过最大值解决方法
- setOnKeyListener捕捉按键,接收两次的解决方法
- xcode8 控制台打印从后台获取的json数据太多无法显示完整解决方法
- IE浏览器打印的页眉页脚设置解决方法
- HP500 Plus绘图仪更换皮带和更换皮带后打印重影解决方法
- 浅谈pandas用groupby后对层级索引levels的处理方法
- ORA-01810:格式代码出现两次 解决方法
- iframe的onload在Chrome/Opera中执行两次Bug的解决方法
- pandas获取groupby分组里最大值所在的行方法
- Word2003中Visio2003图打印错误的解决方法
- 配置了 Spring AOP 但会调用两次的问题解决方法
- onTouch、onkey、dispatchTouchEvent、dispatchKeyEvent等方法被执行 “两次” 的解决方法
- 水晶报表使用经验谈1--建立水晶报表第一步及编译最易出现错误的解决方法及报表转换成pdf文档进行打印方法
- 华为等手机无法打印调试LOG的解决方法
- 打印错误,无法重新打印的解决方法。
- 打印端口冲突解决方法
- iOS tabbar和navigation组合,点击item两次,会pop到上一个页面,解决不让控制器跳转的方法
- pandas安装过程中提示unable to find vcvarsall.bat的解决方法
- U8v10.1 出纳票据打印在 Nantian PR2E上打印不正确问题的解决方法
- Failed to apply plugin [id 'com.android.application'] 和 Could not find com.android.tools.build:gradle:2.XX的最正确的解决方法