首页 > 解决方案 > Pandas 条件映射/填充/替换

问题描述

d1=pd.DataFrame({'x':['a','b','c','c'],'y':[-1,-2,-3,0]})
d2=pd.DataFrame({'x':['d','c','a','b'],'y':[0.1,0.2,0.3,0.4]})

我想用d2 中d1.y的通讯员替换 where y<0 。y这有点像 Excel 中的 vlookup。核心问题是根据 x 替换 y 而不是简单地操纵 y。我想要的是

Out[40]: 
   x    y
0  a  0.3
1  b  0.4
2  c  0.2
3  c  0.0

标签: pythonpandas

解决方案


使用Series.map条件:

s = d2.set_index('x')['y']
d1.loc[d1.y < 0, 'y'] = d1['x'].map(s)
print (d1)

   x    y
0  a  0.3
1  b  0.4
2  c  0.2
3  c  0.0

推荐阅读