我想使用python比較兩個數據框(兩者中的行數和列數相同)並獲得差異數,那麼最好的辦法是什麼?獲取python中2個數據框之間的差異數
def numberOfDifferencess(df1, df2):
if df1.equals(df2):
numberOfDifferences = 0
else:
?????
我想使用python比較兩個數據框(兩者中的行數和列數相同)並獲得差異數,那麼最好的辦法是什麼?獲取python中2個數據框之間的差異數
def numberOfDifferencess(df1, df2):
if df1.equals(df2):
numberOfDifferences = 0
else:
?????
這裏有一種方法:
df
a b
0 1 999
1 2 3
2 3 345
3 56 8
4 7 54
df_b
a b
0 1 111
1 2 3
2 3 345
3 56 8
4 7 54
比較:
df.count().sum() - (df == df_b).astype(int).sum().sum()
1 #this is the number of differences
在功能:
def numberOfDifferencess(df1, df2):
return df1.count().sum() - (df1 == df2).astype(int).sum().sum()
本質(df == df_b).astype(int).sum().sum()
將總結重疊(在一個平等場在anoth的領域呃)在兩個數據框之間。
快速速度測試
df1 = pd.DataFrame(np.random.randint(0, 100, size = (1000,1000)))
df2 = pd.DataFrame(np.random.randint(0, 100, size = (1000,1000)))
%timeit numberOfDifferencess(df1, df2)
%timeit number_of_diff(df1, df2) # using spies006 function for comparison (see below)
10 loops, best of 3: 20.6 ms per loop
1 loop, best of 3: 428 ms per loop
毫不奇怪,這種做法是理想的。迭代數據幀通常不是最有效的方法。
>>> df1
a b
0 1 1
1 2 2
2 3 4
>>> df2
a b
0 1 1
1 2 2
2 8 4
這是一種方法,我剛剛建立了你已經有的東西。我使用loc
來迭代df1
和df2
中的每一行。
>>> numberOfDifferences = 0
>>> for i in range(len(df1)):
... if not df1.loc[i, :].equals(df2.loc[i, :]):
... numberOfDifferences+=1
...
>>> numberOfDifferences
1
如果你想它作爲一個功能暗示,它遵循。
def number_of_diff(df1, df2):
differences = 0
for i in range(len(df1)):
if not df1.loc[i, :].equals(df2.loc[i, :]):
differences += 1
return differences
您可以使用此底層ndarrays功能:
from pandas import DataFrame
df = DataFrame(data=[
[1, 2, 3, 4],
[6, 7, 8, 4],
[1, 2, 3, 2]])
dfd = DataFrame(data=[
[1, 2, 1, 4],
[6, 9, 8, 4],
[1, 1, 3, 2]])
diff = df.values != dfd.values
result = diff.flatten().sum()
感謝安德魯l在得到的喬布爲我做的:) – Krasig