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
Но Я ищу что-то более прямое, если оно существует. Есть идеи?
Это именно то, о чем я думал. Однако я не могу использовать 'from_product' в целом на любом' MultiIndex'. Например, если исходный индекс был «[('A', 1, 'X'), ('B', 3, 'Y')]', я бы ожидал 'reindex' на' level = 'two '' будет возвращать '[('A', 0, 'X'), ('A', 1, 'X'), ('A', 2, 'X'), ('A', 3, X '), (' B ', 0,' Y '), (' B ', 1,' Y '), (' B ', 2,' Y '), (' B ', 3,' Y ')] ' – piRSquared
Вы правы, вы можете использовать' from_product' в целом. Вам нужно только создать новый индекс, а затем переиндексировать. Может быть, 'from_tuples'. – jezrael
И тогда сложнее создает кортежи - возможно, понимание списка может быть полезным. – jezrael