使用多个键在Pandas中进行映射

时间:2017-03-07 10:32:46

标签: python pandas dataframe

我有两个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'

任何提示?

1 个答案:

答案 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