2017-10-28 53 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