2017-10-28 55 views
1

我有一个数据帧,看起来像:地图上2列大熊猫

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

而这一系列:

      Value 
    Col1  Col2  
    A   PY    20 
    B   PB    30 

我愿做一个映射,如果该系列产品具有一个索引(例如它只是相当简单:

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

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

谢谢!

+0

什么是你想获得一个映射的结果呢? – Nain

+0

我得到错误相关的索引 – hdatas

回答

2

您可以在共同列合并它们(具有相同名称的列):

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 
+0

感谢它似乎工作 – hdatas

+0

我认为@MaxU答案效果更好 – hisi

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