我的数据框如下:
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个索引/列进行映射?
谢谢!
答案 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