根据索引将值从一个数据框追加到另一个

时间:2019-11-17 21:37:39

标签: python-3.x pandas

我有两个数据帧df1和df2。 df2是df1的子集

df1 = df1=[[0,1,0,0],
      [1,2,0,0],
      [2,0,0,0],
      [2,4,0,0]]

df1 = pd.DataFrame(df1,columns=['A','B','C','D'])
>>> df1
   A  B  C  D
0  0  1  0  0
1  1  2  0  0
2  2  0  0  0
3  2  4  0  0

>>> df2
   C  D
2  1  3
3  2  4

我想根据索引将df2中的C和D值附加到df1中。

我的预期输出:

   A  B  C  D
0  0  1  0  0
1  1  2  0  0
2  2  0  1  3
3  2  4  2  4

2 个答案:

答案 0 :(得分:2)

使用DataFrame.update

通知:这是inplace,因此它将覆盖您的df1,而无需分配

引自文档:

  

使用来自另一个DataFrame的非NA值进行修改。

     

按索引对齐。没有返回值。

df1.update(df2)
   A  B    C    D
0  0  1 0.00 0.00
1  1  2 0.00 0.00
2  2  0 1.00 3.00
3  2  4 2.00 4.00

要转换回int,请使用DataFrame.astype

df1 = df1.astype(int)

   A  B  C  D
0  0  1  0  0
1  1  2  0  0
2  2  0  1  3
3  2  4  2  4

另一种方法(但不太优雅)是使用addition然后使用fillna

(df1 + df2).fillna(df1).astype(int)

df1.add(df2).fillna(df1).astype(int)
   A  B  C  D
0  0  1  0  0
1  1  2  0  0
2  2  0  1  3
3  2  4  2  4

答案 1 :(得分:0)

另一种方法是使用reindex_likefillna

df_final = df2.reindex_like(df1).fillna(df1).astype(int)

Out[89]:
   A  B  C  D
0  0  1  0  0
1  1  2  0  0
2  2  0  1  3
3  2  4  2  4