簡體   English   中英

比較DataFrame所有行的最快方法

[英]Fastest way to compare all rows of a DataFrame

我編寫了一個程序(在Python 3.6中),試圖將用戶csv / excel的列映射到我擁有的模板xls。 到目前為止,到目前為止還不錯,但是此過程的一部分必須是作為聯系人的用戶數據處理。 例如,我想刪除重復項,合並數據等。為此,我需要將每一行與所有其他行進行比較,這比較昂貴。 我讀取的每個用戶的CSV都有〜2000-4000行,但我希望它對更多行都有效。 我已經將數據存儲在pd.DataFrame中。

除了蠻力外,還有沒有更有效的方法進行比較?

謝謝

首先,您嘗試了什么代碼?

但是要刪除重復項,這在熊貓中非常容易。 下面的例子:

import pandas as pd
import numpy as np
# Creating the Test DataFrame below -------------------------------
dfp = pd.DataFrame({'A' : [np.NaN,np.NaN,3,4,5,5,3,1,5,np.NaN], 
                    'B' : [1,0,3,5,0,0,np.NaN,9,0,0], 
                    'C' : ['AA1233445','A9875', 'rmacy','Idaho Rx','Ab123455','TV192837','RX','Ohio Drugs','RX12345','USA Pharma'], 
                    'D' : [123456,123456,1234567,12345678,12345,12345,12345678,123456789,1234567,np.NaN],
                    'E' : ['Assign','Unassign','Assign','Ugly','Appreciate','Undo','Assign','Unicycle','Assign','Unicorn',]})
print(dfp)

#Output Below----------------

     A    B           C            D           E
0  NaN  1.0   AA1233445     123456.0      Assign
1  NaN  0.0       A9875     123456.0    Unassign
2  3.0  3.0       rmacy    1234567.0      Assign
3  4.0  5.0    Idaho Rx   12345678.0        Ugly
4  5.0  0.0    Ab123455      12345.0  Appreciate
5  5.0  0.0    TV192837      12345.0        Undo
6  3.0  NaN          RX   12345678.0      Assign
7  1.0  9.0  Ohio Drugs  123456789.0    Unicycle
8  5.0  0.0     RX12345    1234567.0      Assign
9  NaN  0.0  USA Pharma          NaN     Unicorn


# Remove all records with duplicated values in column a:
# keep='first' keeps the first occurences.

df2 = dfp[dfp.duplicated(['A'], keep='first')]
#output
     A    B           C           D         E
1  NaN  0.0       A9875    123456.0  Unassign
5  5.0  0.0    TV192837     12345.0      Undo
6  3.0  NaN          RX  12345678.0    Assign
8  5.0  0.0     RX12345   1234567.0    Assign
9  NaN  0.0  USA Pharma         NaN   Unicorn

如果要創建一個沒有重復數據的新數據框以檢查所有列,請使用波浪號。 ~運算符本質上是not equal to!=運算符。 官方文件在這里

df2 = dfp[~dfp.duplicated(keep='first')]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM