更新熊猫数据框并添加新列

时间:2020-06-24 09:12:14

标签: python pandas

问题:

如果其他数据框的列未出现在原始数据框中,如何在添加新列的同时按另一个数据框的行来更新熊猫数据框?

示例:

我有两个数据框:

original_df = pd.DataFrame([{'name' : 'ruben','age' : 25},{'name' : 'henk', 'age' : 26},{'name' : 'gijs', 'age' : 20}],index=[0,1,2])

    name  age
0   ruben  25
1   henk   26
2   gijs   20

update_df = pd.DataFrame([{'name' : 'henk','age' : 27,'hobby' : 'football'},{'name' : 'gijs', 'age' : 21,'hobby' : 'music'}],index=[1,2])

   name  age     hobby
1  henk   27  football
2  gijs   21     music

我想用update_df的行来更新original_df。如果它们都包含相同的行,则可以执行以下操作:

original_df.update(update_df)

但是,结果是:

    name  age
0  ruben  25
1   henk  27
2   gijs  21

我如何确保也添加了新列,以便获得此结果:

    name  age hobby
0  ruben  25
1   henk  27  football
2   gijs  21  music

提前谢谢

编辑答案:该问题被标记为重复(通过链接有关合并101的一般性问题),但不要点击该链接。正确的答案是在评论中:

update_df.combine_first(original_df)

1 个答案:

答案 0 :(得分:0)

您可以使用左联接:“左联接,也称为左外部联接,返回包含左数据帧的所有行的数据帧”(Source)。关于堆栈溢出也有一个不错的话题:Pandas Merging 101

original_df = pd.DataFrame([{'name' : 'ruben','age' : 25},{'name' : 'henk', 'age' : 26},{'name' : 'gijs', 'age' : 20}],index=[0,1,2])
update_df = pd.DataFrame([{'name' : 'henk','age' : 27,'hobby' : 'football'},{'name' : 'gijs', 'age' : 21,'hobby' : 'music'}],index=[1,2])

df_merged = original_df.merge(update_df, on = 'name', how = 'left')