使用多個資料框時,有必要識別一個資料框中存在但另一個中不存在的行。假設我們有兩個資料框 df1 和 df2,其中 df2 是 df1 的子集。
我們如何從 df1 中提取 df2 中不存在的行?
考慮以下範例:
import pandas as pd 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]}) print("df1:") print(df1) print("\ndf2:") print(df2)
輸出:
col1 col2 0 1 10 1 2 11 2 3 12 3 4 13 4 5 14 5 3 10 col1 col2 0 1 10 1 2 11 2 3 12
我們的目標是找出 df1 中的行df2 中不存在。
解決方案:
為了準確識別不常見的行,我們需要在col1 和col2 列上執行df1 和df2 之間的左連接,確保消除df2中的重複項。此外,我們指定 Indicator=True 來建立一個額外的列,指示每個合併行的來源。
產生的資料框df_all 包含df1 和df2 中的所有行,並附加一個列_merge 來指示是否合併行源自兩個資料幀(兩者)、僅df1 (left_only) 或僅df2 (right_only)。
df_all = df1.merge(df2.drop_duplicates(), on=['col1', 'col2'], how='left', indicator=True)
我們現在可以使用布林條件 df_all['_merge'] == 'left_only' 過濾 df_all 以從 df1 中提取不常見的行。
df_uncommon = df_all[df_all['_merge'] == 'left_only'] print("\nUncommon rows in df1:") print(df_uncommon)
這將返回所需的輸出:
col1 col2 _merge 3 4 13 left_only 4 5 14 left_only 5 3 10 left_only
利用具有重複消除功能的左連接和_merge 列,我們可以有效地識別並提取df1 中不存在於df2 中的行。
以上是如何辨識一個 Pandas DataFrame 中存在而不是另一個中存在的行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!