我有2个具有相同列的数据框。列“键”将具有唯一值。

数据框1:-

A B key C
0 1 k1  2
1 2 k2  3
2 3 k3  5

数据框2:-
A B key C
4 5 k1  2
1 2 k2  3
2 3 k4  5

如果Dataframe -2中的键与Dataframe -1相匹配,我想用Dataframe -2中的值更新Dataframe-1中的行。
同样,如果key是new,则将Dataframe-2的整个行添加到Dataframe-1。

最终输出数据帧与相同的列类似。
A B key C
4 5 k1  2   --> update
1 2 k2  3   --> no changes
2 3 k3  5   --> no changes
2 3 k4  5   --> new row

我试过下面的代码。合并后,我只需要4列“A”,“B”,“键”,“C”,没有任何后缀。
df3 = df1.merge(df2,on='key',how='outer')
>>> df3
   A_x  B_x key  C_x  A_y  B_y  C_y
0  0.0  1.0  k1  2.0  4.0  5.0  2.0
1  1.0  2.0  k2  3.0  1.0  2.0  3.0
2  2.0  3.0  k3  5.0  NaN  NaN  NaN
3  NaN  NaN  k4  NaN  2.0  3.0  5.0

最佳答案

似乎您在寻找combine_first

a = df2.set_index('key')
b = df1.set_index('key')

(a.combine_first(b)
  .reset_index()
  .reindex(columns=df1.columns))

     A    B key    C
0  4.0  5.0  k1  2.0
1  1.0  2.0  k2  3.0
2  2.0  3.0  k3  5.0
3  2.0  3.0  k4  5.0

关于python - Pandas 更新并在一个数据帧中添加行,并在另一个数据帧中添加键列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47844529/

10-11 07:36
查看更多