问题:
如果其他数据框的列未出现在原始数据框中,如何在添加新列的同时按另一个数据框的行来更新熊猫数据框?
示例:
我有两个数据框:
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)
答案 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')