如何从每个第一级索引的最大第二级索引的像元中选择值?

时间:2019-01-19 17:22:58

标签: python pandas multi-index

我有以下数据框,现在我想创建一个附加列以包含每列火车的目的地(ziel)(作为第一级行索引zug_nr),该列已经在an_bf列作为每列火车的最后一站(作为第二级行索引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 :(得分:2)

您应该使用transform

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

答案 1 :(得分:2)

GroupBy.lastGroupBy.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()