Python Dataframe 分組排序和 Modin


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 來適應不同的數據規模


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM