根据索引值更新并追加新行 Python

9

我有两个数据框 DF1DF2,它们拥有相同的数据类型并且共享一些索引值,但不是全部共享。

        DF1    
 index, a, b, c
[ abc   1, 3, 6 ]
[ acb   2, 4, 5 ]
[ cab   6, 5, 2 ]
[ bac   3, 6, 2 ]
[ bca   6, 8, 3 ]

        DF2
 index, a, b, d
[ abc   4, 7, 3 ]
[ kde   2, 5, 8 ]
[ lat   7, 2, 6 ]
[ bac   0, 4, 4 ]
[ bca   3, 6, 8 ]

作为结果,我希望达到以下目标:
1.) 基于索引匹配,在DF1中添加列D。
2.) 在DF1中添加未出现在DF2中的索引和行。
        RESULT   
 index, a, b, c, d
[ abc   1, 3, 6, 3 ]
[ acb   2, 4, 5, - ]
[ cab   6, 5, 2, - ]
[ bac   3, 6, 2, 4 ]
[ bca   6, 8, 3, 8 ]
[ kde   2, 5, -, 8 ]
[ lat   7, 2, -, 6 ]
1个回答

13

让我们使用 combine_first:

创建数据:

DF1 = pd.DataFrame({'a':[1,2,6,3,6],'b':[3,4,5,6,8],'c':[6,5,2,2,3]},index=['abc','acb','cab','bac','bca'])
DF2 = pd.DataFrame({'a':[4,2,7,0,3],'b':[7,5,2,4,6],'d':[3,8,6,4,8]},index=['abc','kde','lat','bac','bca'])

df_combo = DF1.combine_first(DF2)
print(df_combo)

       a    b    c    d
abc  1.0  3.0  6.0  3.0
acb  2.0  4.0  5.0  NaN
bac  3.0  6.0  2.0  4.0
bca  6.0  8.0  3.0  8.0
cab  6.0  5.0  2.0  NaN
kde  2.0  5.0  NaN  8.0
lat  7.0  2.0  NaN  6.0

当我合并数据框时,出现了AttributeError: 'DataFrame' object has no attribute 'dtype'的错误。 - Aran Freel
请务必在两个数据框中使用 df.set_index('index') 来设置您的索引。 - Scott Boston
我认为这里有一个错误 - 我设置了索引,但仍然出现“DataFrame对象没有'dtype'”的属性。在错误消息中,似乎combine_first期望一个系列。 - Aran Freel
@AranFreel,你还有问题吗? - Scott Boston
1
@MartimPassos 试试 DF2.combine_first(DF1) 然后反过来。这样行吗? - Scott Boston
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接