加入pandas系列的multIndex

时间:2017-06-03 01:41:30

标签: python pandas dataframe

我如何加入Series A (A, B)多索引,Series B索引为A

1 个答案:

答案 0 :(得分:2)

目前唯一的方法是将指数纳入共同基础 - 例如将B MultiIndex的series_A级别移至列,以便series_Aseries_B仅被A编入索引:

import pandas as pd

series_A = pd.Series(1, index=pd.MultiIndex.from_product([['A1', 'A4'],['B1','B2']], names=['A','B']), name='series_A')
# A   B 
# A1  B1    1
#     B2    1
# A4  B1    1
#     B2    1
# Name: series_A, dtype: int64

series_B = pd.Series(2, index=pd.Index(['A1', 'A2', 'A3'], name='A'), name='series_B')
# A
# A1    2
# A2    2
# A3    2
# Name: series_B, dtype: int64

tmp = series_A.to_frame().reset_index('B')
result = tmp.join(series_B, how='outer').set_index('B', append=True)
print(result)

产量

        series_A  series_B
A  B                      
A1 B1        1.0       2.0
   B2        1.0       2.0
A2 NaN       NaN       2.0
A3 NaN       NaN       2.0
A4 B1        1.0       NaN
   B2        1.0       NaN

加入他们的另一种方法是从B取消series_A级别:

In [215]: series_A.unstack('B').join(series_B, how='outer')
Out[215]: 
     B1   B2  series_B
A                     
A1  1.0  1.0       2.0
A2  NaN  NaN       2.0
A3  NaN  NaN       2.0
A4  1.0  1.0       NaN

unstackB索引级别移动到列索引。因此主题是 相同(将指数放在一个共同的基础上),虽然结果不同。