[英]Add new rows to a pandas dataframe
我有兩個數據幀df1
和df2
,它們是從同一來源計算出來的,但使用不同的方法,因此大多數值都相同,但存在一些差異。 現在,我想根據df2
值更新df1
。
例如:
df1 = pd.DataFrame({'name':['john','deb','john','deb'], 'col1':[490,500,425,678], 'col2':[456,625,578,789],'col3':['TN','OK','OK','NY']})
name col1 col2 col3
john 490 456 TN
deb 500 625 OK
john 425 578 OK
deb 678 789 NY
df2 = pd.DataFrame({'name':['deb','john','deb','john','deb'], 'col1':[400,490,500,425,678], 'col2':[225,456,625,578,789],'col3':['TN','TN','OK','OK','NY']})
name col1 col2 col3
deb 400 225 TN
john 490 456 TN
deb 500 625 OK
john 425 578 OK
deb 678 789 NY
因此,在這種情況下.append
應該只將第一行從df2
附加到df1
。 因此,只有當df2
中有一個新行在df1
不存在(基於 name 和col3
)時,才會添加/更新該列,否則不會。
這幾乎是concat
應該做的事情。
有兩種方法可以獲得結果。
我會告訴你們兩個。
連接然后刪除
這應該對CPU更友好
df3 = pd.concat([df1,df2])
df3.drop_duplicates(subset=['name', 'col3'], inplace=True, keep='last')
這種方法可能比外連接占用更多內存,因為在某一時刻,您將df1
、 df2
以及[df1, df2]
( df3
) 連接到內存中的結果。
外連接然后丟棄
這應該對內存更友好。
df3 = df1.merge(df2, on=list(df1), how='outer')
df3.drop_duplicates(subset=['name', 'col3'], inplace=True, keep='last')
執行outer
連接將確保您從兩個數據幀中獲取所有條目,但df3
將小於我們使用concat
的情況。
關鍵字keep='last'
曾經是take_last=True
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.