pandas有条件地替换或更新整行

时间:2018-04-12 16:38:07

标签: python pandas

我有以下df

    Name    Status   Data
0   Mike    yes      123
1   Bob     no       456
2   Ted     yes      789
3   Fred    yes

现在我有一个新的df

0 Mike no 345
1 Fred no 123

如何更新第一个df以反映更改?这是替换或加入功能吗?

输出:

    Name    Status   Data
0   Mike    no       345
1   Bob     no       456
2   Ted     yes      789
3   Fred    no       123

1 个答案:

答案 0 :(得分:6)

使用updatemerge
注意:我将df限制为我要用双括号合并的列,以确保我的结果保持数据帧df[['Name']]。然后我与dfn进行左合并以添加我想要更新的列。 'left'确保我获得与df相同的索引,并且可以愉快update而没有任何问题。

df.update(df[['Name']].merge(dfn, 'left'))
df

   Name Status   Data
0  Mike     no  345.0
1   Bob     no  456.0
2   Ted    yes  789.0
3  Fred     no  123.0

建议

如果要将'Name'用作索引,请将其设置为索引。

df = df.set_index('Name')
dfn = dfn.set_index('Name')

然后变成

pd.DataFrame.combine_first

流水线副本

dfn.combine_first(df)

     Status   Data
Name              
Bob      no  456.0
Fred     no  123.0
Mike     no  345.0
Ted     yes  789.0

pd.DataFrame.update

到位

df.update(dfn)
df

     Status   Data
Name              
Bob      no  456.0
Fred     no  123.0
Mike     no  345.0
Ted     yes  789.0