多索引-为每个第一个索引获取第二个索引的最大值

时间:2018-11-05 09:10:56

标签: python pandas dataframe multi-index

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

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()

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

任何帮助表示赞赏。

谢谢

1 个答案:

答案 0 :(得分:1)

您可以将idxmaxreset_index一起使用,并按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 indexingIndex.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