如何使用熊猫中另一个数据框的值更新一个数据框

时间:2019-01-07 14:59:31

标签: python python-3.x pandas dataframe

我有两个dfdf1就像

primary_key    code    amount
220492763      763     32.41
213274768      764     23.41
226835769      766     88.41
224874836      7766    100.31
219074759      74836   111.33

df2就像

primary_key    code    amount
213274768      764     24.41
224874836      7766    101.31
217774816      768     123.43
222176762      798     111.44
219374759      24774   134.56

我喜欢使用df2根据相同的df_1更新primary_key,对于df2中的其余行,将它们附加到{{ 1}},结果看起来就像

df1

尝试使用

primary_key    code    amount
220492763      763     32.41
213274768      764     24.41
226835769      766     88.41
224874836      7766    101.31
219074759      74836   111.33
217774816      768     123.43
222176762      798     111.44
219374759      24774   134.56

但是两个df1.set_index('primary_key').combine_first(df2.set_index('primary_key')).reset_index() 混合在一起,我想知道如何解决它。

2 个答案:

答案 0 :(得分:2)

使用combine_first

yourdf=df2.set_index('primary_key').combine_first(df1.set_index('primary_key')).reset_index()
yourdf
Out[287]: 
   primary_key     code  amount
0    213274768    764.0   24.41
1    217774816    768.0  123.43
2    219074759  74836.0  111.33
3    219374759  24774.0  134.56
4    220492763    763.0   32.41
5    222176762    798.0  111.44
6    224874836   7766.0  101.31
7    226835769    766.0   88.41

更新添加订单

idx=pd.concat([df1.primary_key,df2.primary_key]).drop_duplicates()
yourdf=df2.set_index('primary_key').combine_first(df1.set_index('primary_key')).reindex(idx).reset_index()
yourdf
Out[293]: 
   primary_key     code  amount
0    220492763    763.0   32.41
1    213274768    764.0   24.41
2    226835769    766.0   88.41
3    224874836   7766.0  101.31
4    219074759  74836.0  111.33
5    217774816    768.0  123.43
6    222176762    798.0  111.44
7    219374759  24774.0  134.56

答案 1 :(得分:2)

使用pd.concatdrop_duplicatesreindex

idx=pd.concat([df1.primary_key,df2.primary_key]).drop_duplicates()
pd.concat([df2,df1]).drop_duplicates('primary_key').set_index('primary_key').reindex(idx).reset_index()

输出:

   primary_key   code  amount
0    220492763    763   32.41
1    213274768    764   24.41
2    226835769    766   88.41
3    224874836   7766  101.31
4    219074759  74836  111.33
5    217774816    768  123.43
6    222176762    798  111.44
7    219374759  24774  134.56