Python Dataframe 在連接時防止重複 (Python Dataframe prevent duplicates while concating)


問題描述

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

(by MainlandBENY)

參考文件

  1. Python Dataframe prevent duplicates while concating (CC BY‑SA 2.5/3.0/4.0)

#datetime #Python #dataframe #pandas






相關問題

NHibernate:HQL:從日期字段中刪除時間部分 (NHibernate:HQL: Remove time part from date field)

如何獲得在給定時間內發送超過 X 個數據包的 IP (How do I get IPs that sent more than X packets in less than a given time)

Памылка дадання даты пры адніманні ад 0:00 (Dateadd error when subtracting from 0:00)

查找與日曆相比缺失的日期 (Find missing date as compare to calendar)

CodeReview:java Dates diff(以天為單位) (CodeReview: java Dates diff (in day resolution))

顯示兩個給定時間之間的 15 分鐘步長 (display 15-minute steps between two given times)

如何在 C# 中獲取月份名稱? (How to get the month name in C#?)

fromtimestamp() 的反義詞是什麼? (What is the opposite of fromtimestamp()?)

構建 JavaScript 時缺少模塊 (Missing Module When Building JavaScript)

setTimeout 一天中的特定時間,然後停止直到下一個特定時間 (setTimeout for specific hours of day and then stop until next specific time)

將浮點數轉換為 datatime64[ns] (Converting float into datatime64[ns])

Python Dataframe 在連接時防止重複 (Python Dataframe prevent duplicates while concating)







留言討論