2016-09-26 54 views
1

的第n水平等於x的所有值考慮pd.Seriess如何更換在多指數

s = pd.Series(np.arange(6), 
       pd.MultiIndex.from_product([[1, 2], [1, 2, 3]])) 

1 1 0 
    2 1 
    3 2 
2 1 3 
    2 4 
    3 5 
dtype: int64 

我想4替換索引的3所有值。


我剛想出這個,我不喜歡它。

lvl0 = s.index.get_level_values(0) 
lvl1 = s.index.get_level_values(1) 

s.index = pd.MultiIndex.from_tuples(zip(lvl0, np.where(lvl1 == 3, 4, lvl1))) 
s 

1 1 0 
    2 1 
    4 2 
2 1 3 
    2 4 
    4 5 
dtype: int64 

回答

1

你可以使用s.index.levels = [[1, 2], [1, 2, 4]]但你可能會得到一個FutureWarning:

FutureWarning:設置`levels`直接被棄用。使用set_levels 代替

所以,你可以嘗試

>>> s.index = s.index.set_levels([[1, 2], [1, 2, 4]]) 
>>> s 
    1 1 0 
    2 1 
    4 2 
    2 1 3 
    2 4 
    4 5 
1

你可以重置索引

s = s.reset_index() 
s[s==3] = 4 



In[227]: s 
Out[227]: 
    level_0 level_1 0 
0  1  1 0 
1  1  2 1 
2  1  4 2 
3  2  1 4 
4  2  2 4 
5  2  4 5