我有两个Pandas Datafrmae
df: df2:
col1 col2 val col1 col2 s
0 1 a 1.2 0 1 a 0.90
1 2 b 3.2 1 3 b 0.70
2 2 a 4.2 2 1 b 0.02
3 1 b -1.2 3 2 a 0.10
我希望df2['s']
使用df['val']
,并在['col1', 'col2']
的组合匹配时将其乘以mapper = df2.set_index(['col1','col2'])['s']
。如果一行不匹配,我不需要进行乘法
我创建了一个mapper
mapper
col1 col2
1 a 0.90
3 b 0.70
1 b 0.02
2 a 0.10
Name: s, dtype: float64
我得到的地方
df[['col1','col2']]
我希望将其与df[['col1','col2']]
col1 col2
0 1 a
1 2 b
2 2 a
3 1 b
mapped_value = df[['col1','col2']].map(mapper)
但是当我进行映射时
function moveInner(e)
{
var inner = document.getElementById('inner');
inner.style.top = (e.clientY-100)+"px";
inner.style.left= (e.clientX-100)+"px";
}
我收到以下错误
AttributeError:' DataFrame'对象没有属性' map'
任何提示?
答案 0 :(得分:1)
我认为你需要mul
:
df = df2.set_index(['col1','col2'])['s'].mul(df.set_index(['col1','col2'])['val'])
print (df)
col1 col2
1 a 1.080
b -0.024
2 a 0.420
b NaN
3 b NaN
dtype: float64
如果需要替换NaN
:
df = df2.set_index(['col1','col2'])['s']
.mul(df.set_index(['col1','col2'])['val'], fill_value=1)
print (df)
col1 col2
1 a 1.080
b -0.024
2 a 0.420
b 3.200
3 b 0.700
dtype: float64