2 列 pandas 上的地图

hda*_*tas 5 python dictionary numpy dataframe pandas

我有一个数据框,如下所示:

        Col1           Col2
0        A              PY
1        B              PA
2        C              PB
3        B              PB
Run Code Online (Sandbox Code Playgroud)

以及这个系列:

                            Value
   Col1       Col2     
    A          PY             20
    B          PB             30
Run Code Online (Sandbox Code Playgroud)

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

  df['Value'] = df['Col1'].map(s)
Run Code Online (Sandbox Code Playgroud)

如何基于 2 个索引/列进行映射?

谢谢 !

Max*_*axU 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
Run Code Online (Sandbox Code Playgroud)

或使用左外连接:

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
Run Code Online (Sandbox Code Playgroud)

相同的解决方案也适用于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
Run Code Online (Sandbox Code Playgroud)