如何替换熊猫中的数据框

时间:2018-11-28 17:47:15

标签: python pandas numpy

示例数据帧是

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进行替换的方法。我需要你的帮助!

1 个答案:

答案 0 :(得分:0)

pd.concatfillnadrop_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