Как выбрать значение из ячеек самого большого индекса второго уровня каждого индекса первого уровня? - PullRequest
0 голосов
/ 19 января 2019

У меня есть следующий фрейм данных, который я сейчас хочу создать дополнительный столбец, который будет содержать пункт назначения (ziel) каждого поезда (как индекс строки 1-го уровня zug_nr), который уже находится в столбце an_bfкак последняя остановка каждого поезда (как индекс строки 2-го уровня bf).

Однако использование groupby не помогает

df9['ziel'] = df9['an_bf'].groupby(level = 0, axis = 0).max()
df9.head()

             an_zeit            an_bf           sorte  ab_zeit     ziel
zug_nr  bf                  
IC 2309 0   1900-01-01 00:11:00 Duisburg Hbf    IC  1900-01-01 00:00:00 NaN
        1   1900-01-01 00:25:00 Düsseldorf Hbf  IC  1900-01-01 00:00:00 NaN
        2   1900-01-01 00:49:00 Köln Hbf        IC  1900-01-01 00:00:00 NaN
ICE 100 0   1900-01-01 00:13:00 Bochum Hbf      ICE 1900-01-01 00:04:00 NaN
        1   1900-01-01 00:26:00 Dortmund Hbf    ICE 1900-01-01 00:04:00 NaN

Вот как я бы хотел, чтобы это было:

             an_zeit            an_bf           sorte  ab_zeit     ziel
zug_nr  bf                  
IC 2309 0   1900-01-01 00:11:00 Duisburg Hbf    IC  1900-01-01 00:00:00 Köln Hbf
        1   1900-01-01 00:25:00 Düsseldorf Hbf  IC  1900-01-01 00:00:00 Köln Hbf
        2   1900-01-01 00:49:00 Köln Hbf        IC  1900-01-01 00:00:00 Köln Hbf
ICE 100 0   1900-01-01 00:13:00 Bochum Hbf      ICE 1900-01-01 00:04:00 Dortmund Hbf
        1   1900-01-01 00:26:00 Dortmund Hbf    ICE 1900-01-01 00:04:00 Dortmund Hbf

Заранее спасибо заваше предложение!

Ответы [ 2 ]

0 голосов
/ 19 января 2019

Использование GroupBy.last с GroupBy.transform:

#if datetimes are not sorted by an_zeit column
#df9 = df9.sort_values('an_zeit', ascending=False)

df9['ziel'] = df9.groupby(level=0)['an_bf'].transform('last')

#sorting MultiIndex if necessary
#df9 = df9.sort_index()
0 голосов
/ 19 января 2019

Вы должны использовать transform

df9['ziel'] = df9['an_bf'].groupby(level = 0, axis = 0).transform('max')
...