1 回答

TA貢獻(xiàn)1846條經(jīng)驗 獲得超7個贊
pandas.concat
兩個數(shù)據(jù)框concat
兩個數(shù)據(jù)框,但僅在兩個數(shù)據(jù)框的列上連接的順序很重要,
df1
需要放在第一位df1
將帶來不在的行df2
用于
.duplicated
創(chuàng)建遮罩應(yīng)用蒙版,這將刪除多余的行
dfc
現(xiàn)在將只有重復(fù)的行,并且來自的所有行都df1
將排在第一位df1
和之間的所有匹配行將df2
是True
,但來自的額外行將df1
是False
最后,
.drop_duplicates
withkeep='first'
將刪除 底部的所有重復(fù)項,從而僅保留具有正確索引的dfc
行。df1
import pandas as pd
# concat dataframes
dfc = pd.concat([df1[df2.columns], df2])
# drop non-duplicate rows and then drop duplicates, but keep the 1st
df2_correct_indices = dfc[dfc.duplicated(keep=False)].drop_duplicates(keep='first')
# display(df2_correct_indices)
A1 A2 A3 A4
0 111 555 999 101
1 222 666 123 202
2 333 777 456 303
3 444 888 789 404
使用的示例數(shù)據(jù)
df1
df1 = pd.DataFrame({'Name': ['ABC-123', 'DEF-456', 'GHI-789', 'JKL-321', 'not_in_df2'],
'A1': [111, 222, 333, 444, 1000],
'A2': [555, 666, 777, 888, 1000],
'A3': [999, 123, 456, 789, 1000],
'A4': [101, 202, 303, 404, 1000],
'QQ': [1.3, 2.5, 3.7, 4.9, 1000]})
Name A1 A2 A3 A4 QQ
0 ABC-123 111 555 999 101 1.3
1 DEF-456 222 666 123 202 2.5
2 GHI-789 333 777 456 303 3.7
3 JKL-321 444 888 789 404 4.9
4 not_in_df2 1000 1000 1000 1000 1000.0
df2
df2 = pd.DataFrame({'A1': [444, 222, 111, 333],
'A2': [888, 666, 555, 777],
'A3': [789, 123, 999, 456],
'A4': [404, 202, 101, 303]})
A1 A2 A3 A4
0 444 888 789 404
1 222 666 123 202
2 111 555 999 101
3 333 777 456 303
添加回答
舉報