首页 > 解决方案 > 多索引 - 为每个第一个索引获取最大的第二个索引

问题描述

我有一个带有多索引的数据框,如下所示:

ts                   ts2
2018-05-24 23:00:00  2018-05-24 00:00:00  5
                     2018-05-24 00:15:00  4 
                     2018-05-24 00:30:00  6 
                     2018-05-24 00:45:00  7

我想为索引 1 中的每个日期时间获取索引 2 的最大值:

2018-05-24 23:00:00  2018-05-24 00:45:00  7

这不可能那么困难,但不知何故我无法管理它。

我尝试了 for 循环切片

for ts, new_df in df.groupby(level=0):
   print(new_df)

这导致每个 ts 都有一个新的数据帧 .... 此外,我能够获得 new_df 的最大索引

new_df.index.max()

有了这些信息,我应该能够选择正确的值(索引对)并构建所需的数据框。但是,我无法管理它......

任何帮助表示赞赏。

谢谢

标签: pythonpandasdataframemulti-index

解决方案


您可以使用idxmaxwithreset_index和 select by 位置iloc

df = df.iloc[df.reset_index().groupby('ts')['ts2'].idxmax()]
print (df)
                                         val
ts                  ts2                     
2018-05-24 23:00:00 2018-05-24 00:45:00    7

或使用boolean indexingwith Index.duplicated,但首先sort_index

df = df.sort_index()
df = df[~df.index.get_level_values(0).duplicated(keep='last')]
print (df)
                                         val
ts                  ts2                     
2018-05-24 23:00:00 2018-05-24 00:45:00    7

推荐阅读