映射2列熊猫

时间:2017-10-28 10:23:39

标签: python pandas numpy dictionary dataframe

我的数据框如下:

        Col1           Col2
0        A              PY
1        B              PA
2        C              PB
3        B              PB

和本系列:

                            Value
   Col1       Col2     
    A          PY             20
    B          PB             30

我想做一个映射,如果该系列有一个索引(仅限Col1),它非常简单:

  df['Value'] = df['Col1'].map(s)

如何根据2个索引/列进行映射?

谢谢!

2 个答案:

答案 0 :(得分:3)

您可以将它们合并到公共列(具有相同名称的列)上:

In [28]: d1
Out[28]:
  Col1 Col2
0    A   PY
1    B   PA
2    C   PB
3    B   PB

In [29]: d2
Out[29]:
           Value
Col1 Col2
A    PY       20
B    PB       30

In [30]: d1.merge(d2.reset_index())
Out[30]:
  Col1 Col2  Value
0    A   PY     20
1    B   PB     30

或使用左外连接:

In [33]: d1.merge(d2.reset_index(), how='left')
Out[33]:
  Col1 Col2  Value
0    A   PY   20.0
1    B   PA    NaN
2    C   PB    NaN
3    B   PB   30.0

同样的解决方案也适用于d2作为系列:

In [31]: s
Out[31]:
Col1  Col2
A     PY      20
B     PB      30
Name: Value, dtype: int64

In [32]: d1.merge(s.reset_index())
Out[32]:
  Col1 Col2  Value
0    A   PY     20
1    B   PB     30

答案 1 :(得分:1)

In [5]: d1
Out[5]:

   col1 col2
0    A   PY 
1    B   PA
2    C   PB
3    D   PB

In [7]: d2
Out[7]:

col1 col2  val
A   PY   20
B   PB   30

您可以使用合并:

 In [8]: d1.merge(d2.reset_index())
 Out[8]:
    col1 col2   val
 0    A   PY    20

或者:

In [9]: result = pd.concat([d1, d2], axis=1)

In [10]: result
Out[10]:
   col1 col2 col1 col2   val
  0    A   PY    A   PY  20.0
  1    B   PA    B   PB  30.0
  2    C   PB  NaN  NaN   NaN
  3    D   PB  NaN  NaN   NaN