Python Dataframe 分组排序和 Modin

1、按照其中一列进行排序

在dataframe中,按照其中的一列排序:比如q值倒排

(1)rank方法

data['new_rank'] = data.groupby('house_code')['q_score_new'].rank(ascending=False, method='dense')

(2)sort_values方法

data.sort_values(['q_score_new'], ascending=False).groupby(['house_code']).cumcount() + 1 

2、按照其中多列进行排序

在dataframe中,按照其中的多列排序:比如q值倒排、经纪人ucid正排

sort_values方法

(1)dsort_values方法ata.sort_values(['q_score_new', 'agent_ucid'], ascending=[ False, True]).groupby(['house_code']).cumcount() + 1 # 20多秒(100多万行数据集上)

(2)data = data.groupby('house_code').sort_values(by=['q_score_new', 'agent_ucid'], ascending=(False, True)).groupby('house_code').apply(f) # 200多秒(100多万行数据集上)

    def f(df):
df['new_rank'] = range(1, len(df) + 1)
return df

最终结果显示:第一种比第二种()快10倍左右(在200万行数据集上),所以推荐第二种!!!

3、modin

(1)简介

Modin 是加州大学伯克利分校 RISELab 的一个早期项目,旨在促进分布式计算在数据科学领域的应用。它是一个多进程的数据帧(Dataframe)库,具有与 Pandas 相同的应用程序接口(API),使用户可以加速他们的 Pandas 工作流。

(2)原理

从本质上讲,Modin 所做的只是增加了 CPU 所有内核的利用率,从而提供了更好的性能。

(3)安装使用

Modin 是完全开源的,可以通过下面的 GitHub 链接获得:

https://github.com/modin-project/modin

我们可以使用如下所示的 PyPi 指令来安装 Modin:

pip install modin

在 Windows 环境下,Ray 是安装 Modin 所需的依赖之一。Windows 本身并不支持 Ray,所以为了安装它,用户需要使用 WSL(适用 Linux 的 Windows 子系统,适用Linux和mac)

(4)性能提升

pandas的内置函数(比如groupby等)因为优化的很好,所以和modin.pandas处理速度差不多,提升主要提现在数据读取上。 通常,Modin 使用「read_csv」函数读取 2G 数据需要 2 秒,而 读取 18G 数据大约需要不到 18 秒。

%%time
import pandas
pandas_csv_data = pandas.read_csv("../800MB.csv")
-----------------------------------------------------------------
CPU times: user 26.3 s, sys: 3.14 s, total: 29.4s
Wall time: 29.5 s
%%time
import modin.pandas
modin_csv_data = pd.read_csv("../750MB.csv")
-----------------------------------------------------------------
CPU times: user 76.7 ms, sys: 5.08 ms, total: 81.8 ms
Wall time: 7.6 s

(5)未来

Modin 项目仍处于早期阶段,但对 Pandas 来说是一个非常有发展前景的补充。Modin 为用户处理所有的数据分区和重组任务,这样我们就可以集中精力处理工作流。Modin 的基本目标是让用户能够在小数据和大数据上使用相同的工具,而不用考虑改变 API 来适应不同的数据规模

Python Dataframe 分组排序和 Modin的更多相关文章

  1. Python实现常用排序算法

    Python实现常用排序算法 冒泡排序 思路: 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完 ...

  2. 一条Sql语句分组排序并且限制显示的数据条数

    如果我想得到这样一个结果集:分组排序,并且每组限定记录集的数量,用一条SQL语句能办到吗? 比如说,我想找出学生期末考试中,每科的前3名,并按成绩排序,只用一条SQL语句,该怎么写? 表[TScore ...

  3. SQL语句分组排序,多表关联排序

    SQL语句分组排序,多表关联排序总结几种常见的方法: 案例一: 在查询结果中按人数降序排列,若人数相同,则按课程号升序排列? 分析:单个表内的多个字段排序,一般可以直接用逗号分割实现. select ...

  4. oracle 分组排序函数

    项目开发中,我们有时会碰到需要分组排序来解决问题的情况:1.要求取出按field1分组后,并在每组中按照field2排序:2.亦或更加要求取出1中已经分组排序好的前多少行的数据 这里通过一张表的示例和 ...

  5. Python实现各种排序算法的代码示例总结

    Python实现各种排序算法的代码示例总结 作者:Donald Knuth 字体:[增加 减小] 类型:转载 时间:2015-12-11我要评论 这篇文章主要介绍了Python实现各种排序算法的代码示 ...

  6. oracle中分组排序函数用法 - 转

    项目开发中,我们有时会碰到需要分组排序来解决问题的情况,如:1.要求取出按field1分组后,并在每组中按照field2排序:2.亦或更加要求取出1中已经分组排序好的前多少行的数据 这里通过一张表的示 ...

  7. List对象分组排序算法

    场景: List里面的对象是订单的节点,比如我们快递的物流状态,这个是需要有序的,所以需要根据订单号进行分组排序. import java.util.ArrayList; import java.ut ...

  8. js分组排序算法, OrderBy

    由于项目中需要对数据进行分组排序,类似于sql中 order by column1,column2....  实现的关键是 分组排序,第一个column1,排序完成之后,对其分组,然后按照column ...

  9. MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能

    MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能 由于MYSQL没有提供类似ORACLE中OVER()这样丰富的分析函数. 所以在MYSQ ...

随机推荐

  1. SQL查询--内连接、外连接、自连接查询

    先创建2个表:学生表和教师表   1.内连接: 在每个表中找出符合条件的共有记录.[x inner join y on...] 第一种写法:只用where SELECT t.TEACHER_NAME, ...

  2. 百度开源的分布式唯一ID生成器UidGenerator,解决了时钟回拨问题

    UidGenerator是百度开源的Java语言实现,基于Snowflake算法的唯一ID生成器.而且,它非常适合虚拟环境,比如:Docker.另外,它通过消费未来时间克服了雪花算法的并发限制.Uid ...

  3. 洛谷 P4124 (数位 DP)

    ### 洛谷 P4124 题目链接 ### 题目大意: 给你一段区间,让你求满足下列两个条件时的数的个数. 1.至少有 3 个相邻相同数字 (即 111 .1111 .222 等) 2.不能同时出现 ...

  4. 在生成.net core 3.0程序时不包含nuget库

    在.net core 3.0中,默认的生成行为有了两个变化,一个是默认生成可执行文件,另一个是会复制依赖的Nuget项. 前一个变化会默认生成可执行的exe,用起来更加方便了.另一个变化可能是为了减少 ...

  5. SpringBoot捕获AccessDeniedException

    https://www.jianshu.com/p/bb14cca5ab3d 自定义AccessDeniedHandler /** * @Author: jialing xu * @Descripti ...

  6. 创建WPF项目

    参考: https://www.cnblogs.com/yhcao/p/6237611.html https://mahapps.com/guides/reporting-issues.html ht ...

  7. php实现基础排序算法

    <?php header("content-type:text/html;charset=utf-8"); $testArr = array(); $time1 = micr ...

  8. Asp.net MVC 中的TempData对象的剖析

    另一篇文章,也对TempData 做了很详细的介绍,链接地址:https://www.jianshu.com/p/eb7a301bc536   . MVC中的 TempData 可以在Controll ...

  9. FCC---Create Movement Using CSS Animation---设计一个盒子上下左右移动,结合animation, @keyframe, position (上下左右的offset)

    When elements have a specified position, such as fixed or relative, the CSS offset properties right, ...

  10. 跳转常规 -- 为什么不要使用404、500等http状态码作为业务代码响应

    不要使用HTTP状态码作为业务代码响应 HTTP状态码 是指浏览器访问网址,成功或异常时浏览器或服务器告知用户的代码数字,它指的是网络或服务器的状态,有着不同的含义. 参加MDN.Java Api,常 ...