使用不相等的索引

时间:2015-12-09 12:53:32

标签: python pandas

我有以下数据框和具有不同索引的系列,并喜欢将系列's'添加到dataframe df2。

>>> import numpy as np
>>> import pandas as pd
>>> df = pd.DataFrame({'a': [1, 2, 2, 3], 'b': [1, 1, 2, 2], 'c': [1, 2, 3,4]})
>>> df
   a  b  c
0  1  1  1
1  2  1  2
2  2  2  3
3  3  2  4
>>> df2 = df.set_index(['a', 'b'])
>>> df2
     c
a b   
1 1  1
2 1  2
  2  3
3 2  4
>>> s = pd.Series([10, 20, 30], pd.MultiIndex.from_tuples([[1], [2], [3]], names=['a']))
>>> s
a
1    10
2    20
3    30
dtype: int64
>>> df2['x'] = s
>>> df2
     c   x
a b       
1 1  1 NaN
2 1  2 NaN
  2  3 NaN
3 2  4 NaN

我知道列'x'设置为NaN,因为列索引不匹配,但有没有办法通过考虑匹配列来添加系列'?

预期结果是

>>> df2
     c   x
a b       
1 1  1 10
2 1  2 20
  2  3 20    # because index a=2 (ignored 'b' because it didn't exist in series 's')
3 2  4 30

1 个答案:

答案 0 :(得分:5)

您可以使用DataFrame.join

>>> df2.join(pd.DataFrame({"x": s}))
     c   x
a b       
1 1  1  10
2 1  2  20
  2  3  20
3 2  4  30