2
考慮的一個水平pd.Series
s
和pd.MultiIndex
idx
便捷的方式,以重新編制一個多指標
idx = pd.MultiIndex.from_product([list('AB'), [1, 3], list('XY')],
names=['one', 'two', 'three'])
s = pd.Series(np.arange(8), idx)
s
one two three
A 1 X 0
Y 1
3 X 2
Y 3
B 1 X 4
Y 5
3 X 6
Y 7
dtype: int32
我想reindex
上level='two'
與np.arange(4)
我可以做到這一點:
s.unstack([0, 2]).reindex(np.arange(4), fill_value=0).stack().unstack([0, 1])
one two three
A 0 X 0
Y 0
1 X 0
Y 1
2 X 0
Y 0
3 X 2
Y 3
B 0 X 0
Y 0
1 X 4
Y 5
2 X 0
Y 0
3 X 6
Y 7
dtype: int32
但如果存在,我正在尋找更直接的東西。有任何想法嗎?
這正是我在想的事情。但是,我無法在任何'MultiIndex'上一般使用'from_product'。例如,如果原始索引是'[('A',1,'X'),('B',3,'Y')]',我希望'level ='兩個'reindex' ''將會返回'[''A',0,'X'),('A',1,'X'),('A',2,'X'),('A',3'' ('B',0,'Y'),('B',1,'Y'),('B',2,'Y'), )]' – piRSquared
你是對的,你一般可以使用'from_product'。您只需要以某種方式創建新索引,然後重新索引。也許'from_tuples'。 – jezrael
然後更復雜的是創建元組 - 也許列表理解可能會有幫助。 – jezrael