我有 2 個資料框,我正在與以下代碼段進行比較:
df3 = pandas.concat([df1, df2]).drop_duplicates(keep=False)
它作業正常,它比較兩者,作為輸出,我得到了與它們不同的行。
我想要實作的是比較 2 個資料幀以獲取不同的行,但作為輸出僅從第一個資料幀獲取/保留行。
是否有捷徑可尋?
uj5u.com熱心網友回復:
我會用~isin():
df.set_index(list(df.columns), inplace=True)
df2.set_index(list(df2.columns), inplace=True)
df[~df.index.isin(df2.index)].reset_index()
uj5u.com熱心網友回復:
如果您只想要第一個資料框中的唯一行,那么您確實需要左連接。
df3 = df1.merge(df2.drop_duplicates(), on='your_column_here',
how='left', indicator=True)
現在您可以檢查_merge列并僅過濾左側:
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
uj5u.com熱心網友回復:
一種方法是用數字(如.assign(mark=1))預先標記 df 的行并在之后洗掉輔助列
df1 = pd.DataFrame(np.random.randint(-10, 10, 20)) # dummy data
df2 = pd.DataFrame(np.random.randint(-10, 10, 20)) # dummy data
df3 = pd.concat([df1.assign(mark=1), df2.assign(mark=2)]).drop_duplicates(keep=False)
print(df3[df3['mark'].eq(1)].drop(columns='mark'))
印刷:
0
2 -6
3 -8
14 3
16 -3
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/349184.html
