示例数据帧是
df1=
A B C
a0 b0 c0
a1 b1 c1
a2 b2 c2
...
an bn cn
df2=
A B
x0 y0
x1 y1
x2 y2
...
xm ym
我要替换的是
如果(ai,bi)=(xj,yj)对于某些j,则ci = 0
例如,
df3=
A B C
1 4 c0
2 8 c1
2 9 c2
3 12 c3
3 16 c4
4 16 c5
df4=
A B
2 8
3 12
我想了解一下
result=
A B C
1 4 c0
2 8 0
2 9 c2
3 12 0
3 16 c4
4 16 c5
我找不到使用np.where
进行替换的方法。我需要你的帮助!
答案 0 :(得分:0)
将pd.concat
与fillna
和drop_duplicates
结合使用,您可以执行以下操作:
result = (pd.concat([df4,df3],ignore_index=True,sort=False)
.fillna(0).drop_duplicates(['A','B'],keep='first'))
print (result)
A B C
0 2 8 0
1 3 12 0
0 1 4 c0
2 2 9 c2
4 3 16 c4
5 4 16 c5
您可以在末尾添加.sort_values(['A','B']).reset_index(drop=True)
以获得完全相同的结果
使用merge
和参数how='inner'
来更改索引,然后loc
修改这些索引:
result = df3.copy()
result.loc[df3.reset_index().merge(df4,how='inner')['index'],'C'] = 0
print (result)
A B C
0 1 4 c0
1 2 8 0
2 2 9 c2
3 3 12 0
4 3 16 c4
5 4 16 c5