例如,如果第一个数据帧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
对于df1中所有与df2中的行匹配的行(不包括“值”列),我想将df1中的这些行的“值”列从1更改为0。我可以使用。但是,如何更改该值?
最佳答案
您可以在indicator
时将merging
参数指定为true,这将生成一个额外的列,指定行是否来自两侧,然后您可以基于_merge
列修改value列:
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
另外的选择:
df1 = df1.set_index(['a', 'b'])
df1.loc[df2.set_index(['a', 'b']).index, 'value'] = 0
df1.reset_index()
# a b value
#0 1 2 0
#1 2 3 1
关于python - 为与python中的第二个数据框匹配的行更改第一个数据框的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41755418/