簡體   English   中英

向 Pandas 數據框添加新行

[英]Add new rows to a pandas dataframe

我有兩個數據幀df1df2 ,它們是從同一來源計算出來的,但使用不同的方法,因此大多數值都相同,但存在一些差異。 現在,我想根據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應該做的事情。

有兩種方法可以獲得結果。

  1. 連接兩個數據幀,然后刪除重復項
  2. 使用外部連接/合並,然后刪除重復項

我會告訴你們兩個。

連接然后刪除

這應該對CPU友好

df3 = pd.concat([df1,df2])
df3.drop_duplicates(subset=['name', 'col3'], inplace=True, keep='last')

這種方法可能比外連接占用更多內存,因為在某一時刻,您將df1df2以及[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的情況。

0.15 及更早版本注意:

關鍵字keep='last'曾經是take_last=True

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM