Pandas Индекс уровня серии Multiinx - PullRequest
2 голосов
/ 03 февраля 2020

У меня есть ser_apl pandas. Серии с 2-уровневым мультииндексом:

Date        Team     
2013-01-31  Man Utd      11
2013-02-28  Man Utd      12
2013-03-29  Man Utd      13
2013-04-30  Man Utd      14
2013-05-31  Man Utd      15
2013-06-28  Man Utd      16
2013-07-31  Man Utd      17
2013-08-30  Man Utd      18
2013-09-30  Man Utd      19
2013-10-31  Man Utd      20
2013-11-29  Man Utd      21
2013-12-31  Man Utd      22
2013-07-31  Liverpool    37
2013-08-30  Liverpool    38
2013-09-30  Liverpool    39
2013-10-31  Liverpool    40
2013-11-29  Liverpool    41
2013-12-31  Liverpool    42
2013-01-31  Chelsea      51
2013-02-28  Chelsea      52
2013-03-29  Chelsea      53
2013-04-30  Chelsea      54
2013-05-31  Chelsea      55
2013-06-28  Chelsea      56
Name: Result, dtype: int64

Мне нужно переиндексировать Дата уровень для всех команд, чтобы получить :

Date        Team     
2013-01-31  Chelsea      51.0
2013-02-28  Chelsea      52.0
2013-03-29  Chelsea      53.0
2013-04-30  Chelsea      54.0
2013-05-31  Chelsea      55.0
2013-06-28  Chelsea      56.0
2013-07-31  Chelsea       NaN
2013-08-30  Chelsea       NaN
2013-09-30  Chelsea       NaN
2013-10-31  Chelsea       NaN
2013-11-29  Chelsea       NaN
2013-12-31  Chelsea       NaN
2013-01-31  Liverpool     NaN
2013-02-28  Liverpool     NaN
2013-03-29  Liverpool     NaN
2013-04-30  Liverpool     NaN
2013-05-31  Liverpool     NaN
2013-06-28  Liverpool     NaN
2013-07-31  Liverpool    37.0
2013-08-30  Liverpool    38.0
2013-09-30  Liverpool    39.0
2013-10-31  Liverpool    40.0
2013-11-29  Liverpool    41.0
2013-12-31  Liverpool    42.0
2013-01-31  Man Utd      11.0
2013-02-28  Man Utd      12.0
2013-03-29  Man Utd      13.0
2013-04-30  Man Utd      14.0
2013-05-31  Man Utd      15.0
2013-06-28  Man Utd      16.0
2013-07-31  Man Utd      17.0
2013-08-30  Man Utd      18.0
2013-09-30  Man Utd      19.0
2013-10-31  Man Utd      20.0
2013-11-29  Man Utd      21.0
2013-12-31  Man Utd      22.0
dtype: float64

Сначала я подготовил индекс:

idx_level_date = ser_apl.index.get_level_values('Date').unique()

Затем я попробовал несколько способов:

ser_apl.reindex(idx_level_date, level = 'Date')

и как альтернативу:

ser_apl.groupby('Team').apply(lambda iter_team: iter_team.reindex(idx_level_date, level = 'Date'))

И то, и другое не удалось: результат был таким же, как и в оригинальном ser_apl.

Так что мне нужна помощь для переиндексации.

PS Здесь я нашел альтернативный трюк для unstack / stack: Заполнение пробелов в датах в MultiIndex Pandas Dataframe

Но вопрос в том, почему я не могу сделать то же самое с соответствующим методом?

1 Ответ

2 голосов
/ 03 февраля 2020

Создайте все возможные даты с помощью MultiIndex.from_product и перейдите к Series.reindex, при необходимости измените порядок на Series.sort_index:

mux = pd.MultiIndex.from_product(ser_apl.index.levels, names=ser_apl.index.names)
s = ser_apl.reindex(mux).sort_index(level=[1,0])

print (s)
Date        Team     
2013-01-31  Chelsea      51.0
2013-02-28  Chelsea      52.0
2013-03-29  Chelsea      53.0
2013-04-30  Chelsea      54.0
2013-05-31  Chelsea      55.0
2013-06-28  Chelsea      56.0
2013-07-31  Chelsea       NaN
2013-08-30  Chelsea       NaN
2013-09-30  Chelsea       NaN
2013-10-31  Chelsea       NaN
2013-11-29  Chelsea       NaN
2013-12-31  Chelsea       NaN
2013-01-31  Liverpool     NaN
2013-02-28  Liverpool     NaN
2013-03-29  Liverpool     NaN
2013-04-30  Liverpool     NaN
2013-05-31  Liverpool     NaN
2013-06-28  Liverpool     NaN
2013-07-31  Liverpool    37.0
2013-08-30  Liverpool    38.0
2013-09-30  Liverpool    39.0
2013-10-31  Liverpool    40.0
2013-11-29  Liverpool    41.0
2013-12-31  Liverpool    42.0
2013-01-31  Man Utd      11.0
2013-02-28  Man Utd      12.0
2013-03-29  Man Utd      13.0
2013-04-30  Man Utd      14.0
2013-05-31  Man Utd      15.0
2013-06-28  Man Utd      16.0
2013-07-31  Man Utd      17.0
2013-08-30  Man Utd      18.0
2013-09-30  Man Utd      19.0
2013-10-31  Man Utd      20.0
2013-11-29  Man Utd      21.0
2013-12-31  Man Utd      22.0
Name: Result, dtype: float64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...