取得Pandas DataFrame 中的唯一行
給定兩個Pandas 資料幀,通常需要識別僅存在於其中一個資料幀中的行。這可以透過利用合併操作來有效地實現。
例如,考慮以下資料幀:
df1 = pd.DataFrame(data={'col1': [1, 2, 3, 4, 5, 3], 'col2': [10, 11, 12, 13, 14, 10]}) df2 = pd.DataFrame(data={'col1': [1, 2, 3], 'col2': [10, 11, 12]})
要從 df1 取得 df2 中不存在的行,我們可以執行df1 和 df2 之間的左連接。為了確保 df1 中的每一行與 df2 中的一行完全匹配,我們需要先從 df2 中刪除重複的行。我們可以使用 drop_duplicates() 函數來做到這一點。
df_all = df1.merge(df2.drop_duplicates(), on=['col1', 'col2'], how='left', indicator=True)
產生的df_all 資料幀將有一個名為_merge 的附加列,指示每一行是否來自df1 和df2(「兩者」),來自僅df1('left_only'),或僅來自df2 ('right_only').
col1 col2 _merge 0 1 10 both 1 2 11 both 2 3 12 both 3 4 13 left_only 4 5 14 left_only 5 3 10 left_only
要從df1 提取df2中不存在的行,我們只需選擇_merge 等於'left_only' 的行即可:
rows_not_in_df2 = df_all[df_all['_merge'] == 'left_only']
col1 col2 0 4 13 1 5 14 2 3 10
避免錯誤方法
重要的是要避免無法將行視為一個整體的錯誤解決方案。一些解決方案僅檢查一行中的每個單獨值是否存在於另一個資料框中,這可能會導致不正確的結果。
例如,如果我們向df1 增加了另一行資料[3, 10],其中也存在於df2 中,不正確的方法仍會將其識別為不存在於df2 中,因為它在兩列中具有不同的值。但是,我們的方法將正確地將其識別為不存在,因為它已經在 df2 中,並且兩列的值相同。
以上是比較兩個 DataFrame 時如何有效辨識 Pandas DataFrame 中的唯一行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!