第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

熊貓DataFrame中行的高效成對比較

熊貓DataFrame中行的高效成對比較

哈士奇WWW 2021-05-16 12:01:39
我目前正在使用較小的數(shù)據(jù)集(約900萬行)。不幸的是,大多數(shù)條目都是字符串,即使強(qiáng)制使用類別,框架的內(nèi)存也只有幾GB。我想做的是將每一行與其他行進(jìn)行比較,并對內(nèi)容進(jìn)行直接比較。例如,給定   A   B     C      D0 cat blue  old Saturday1 dog red   old Saturday我想算一下      d_A   d_B   d_C   d_D0, 0  True  True  True  True0, 1  False False True  True1, 0  False False True  True1, 1  True  True  True  True顯然,組合爆炸將無法將每個記錄與其他每個記錄進(jìn)行比較。因此,我們可以通過在group A上應(yīng)用groupby來使用阻塞。我的問題是,有沒有一種方法可以以大熊貓或dask的方式執(zhí)行此操作,該方法比以下順序更快:按索引分組外部將每個組結(jié)合起來以產(chǎn)生對在成對的每一行上使用dataframe.apply比較函數(shù)作為參考,假設(shè)我可以訪問大量內(nèi)核(數(shù)百個)以及大約200G的內(nèi)存。
查看完整描述

2 回答

?
慕田峪9158850

TA貢獻(xiàn)1794條經(jīng)驗 獲得超7個贊

原來該解決方案是使用numpy代替步驟3)。雖然我們無法創(chuàng)建每一行的外部聯(lián)接,但是我們可以按A列中的值進(jìn)行分組,并為外部聯(lián)接創(chuàng)建較小的組。


訣竅在于使用numpy.equal.outer(df1, df2).ravel()當(dāng)將數(shù)據(jù)幀以這種方式作為輸入傳遞給numpy函數(shù)時,結(jié)果將是更快(至少30倍)的向量化結(jié)果。例如:


>>> df = pd.DataFrame

   A   B     C      D

0 cat blue  old Saturday

1 dog red   old Saturday


>>> result = pd.DataFrame(columns=["A", "B", "C", "D"], 

                            index=pd.MultiIndex.from_product([df.index, df.index]))

>>> result["A"] = np.equal.outer(df["A"], df["A"]).ravel()

>>> result

        A     B     C     D

0, 0  True   NaN   NaN   NaN  

0, 1  False  NaN   NaN   NaN  

1, 0  False  NaN   NaN   NaN  

1, 1  True   NaN   NaN   NaN  

您可以為每列重復(fù),也可以只對結(jié)果逐列應(yīng)用即可自動執(zhí)行該過程。


查看完整回答
反對 回復(fù) 2021-05-25
?
慕尼黑的夜晚無繁華

TA貢獻(xiàn)1864條經(jīng)驗 獲得超6個贊

  1. 您可以考慮將問題表述為聯(lián)接操作

  2. 您可能會考慮使用分類來減少內(nèi)存使用


查看完整回答
反對 回復(fù) 2021-05-25
  • 2 回答
  • 0 關(guān)注
  • 178 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號