例如,如果第一个数据框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'])
。但是我如何更改值?
答案 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值。