例如,如果第一个数据帧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/

10-11 03:46