問題描述
Python Dataframe 在連接時防止重複 (Python Dataframe prevent duplicates while concating)
我有兩個數據框。我將它們連接起來製作一個。問題是,在對代碼進行故障排除時,我會多次使用相同的 concat 代碼。這會產生重複行的數據幀,就像我執行 concat 一樣多次。我想阻止它。
我的代碼:
rdf = pd.DataFrame({'A':[10,20]},index=pd.date_range(start='2020‑05‑04 08:00:00', freq='1h', periods=2))
df2 = pd.DataFrame({'A':[30,40]},index=pd.date_range(start='2020‑05‑04 10:00:00', freq='1h', periods=2))
# Run it first time
rdf= pd.concat([rdf,df2])
# First time result
rdf
A
2020‑05‑04 08:00:00 10
2020‑05‑04 09:00:00 20
2020‑05‑04 10:00:00 30
2020‑05‑04 11:00:00 40
# Run it second time
rdf= pd.concat([rdf,df2])
# second time result produces duplicates
rdf
A
2020‑05‑04 08:00:00 10
2020‑05‑04 09:00:00 20
2020‑05‑04 10:00:00 30
2020‑05‑04 11:00:00 40
2020‑05‑04 10:00:00 30
2020‑05‑04 11:00:00 40
我的解決方案:我的方法是正確的新行代碼和通過保留第一個來刪除重複項。
rdf= pd.concat([rdf,df2])
rdf.drop_duplicates(keep='first',inplace=True)
rdf
A
2020‑05‑04 08:00:00 10
2020‑05‑04 09:00:00 20
2020‑05‑04 10:00:00 30
2020‑05‑04 11:00:00 40
有更好的方法嗎?我的意思是,我們可以在連接時防止這種情況嗎?因此,無需編寫額外的行代碼來刪除重複項。
參考解法
方法 1:
Then let us try combine_first
rdf = rdf.combine_first(df2)
rdf = rdf.combine_first(df2)
rdf
Out[115]:
A
2020‑05‑04 08:00:00 10.0
2020‑05‑04 09:00:00 20.0
2020‑05‑04 10:00:00 30.0
2020‑05‑04 11:00:00 40.0