在python中更改与第二个数据帧匹配的行的第一个数据帧的值

时间:2017-01-20 03:08:04

标签: python pandas

例如,如果第一个数据框df1是:

     'a' 'b' 'value'
0     1   2     1
1     2   3     1

和第二个数据框df2

     'a' 'b' 
0     1   2

我想得到像

这样的东西
     'a' 'b' 'value'
0     1   2     0
1     2   3     1

对于与df2中的行匹配的df1中的所有行(不包括'value'列),我想将df1中这些行的'value'列从1更改为0.我可以通过以下方式找到公共行使用df1.merge(df2, on=['a','b'])。但是我如何更改值?

2 个答案:

答案 0 :(得分:1)

您可以在indicator时指定merging参数为true,这将生成一个额外列,指定行是否来自两侧,然后您可以根据{修改值列{1}}栏:

_merge

另一种选择:

df_merge = df1.merge(df2, indicator=True, how = "left")
df_merge["value"] = df_merge["value"].where(df_merge['_merge'] != "both", 0)
df_merge.drop("_merge", axis=1)

#    a   b   value
#0   1   2       0
#1   2   3       1

答案 1 :(得分:0)

您可以使用内部联接找到公共行。

df1.merge(df2, how= "inner", left_index= True, right_index= True)

如果您想要发布的输出,则可以使用左连接

df2.merge(df1, how="left", left_index= True, right_index= True)

您可以用零替换nan值。