2017-06-03 155 views

回答

2

目前唯一的方法是使指數達到一個共同的基礎 - 例如,移動B水平series_A多指標的一列這樣既series_Aseries_BA唯一索引:

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索引級別移動到列索引。因此,主題是 相同(使指數達到一個共同的基礎),儘管結果是不同的。

+0

比你想象的更不明顯。 – piRSquared

+0

'reset_index'緊跟'set_index'聽起來合法。然而,我總是想知道爲什麼'join'不像在數據框架上那樣靈活地操作系列。 –