python - 多索引 - 为每个第一个索引获取最大的第二个索引
问题描述
我有一个带有多索引的数据框,如下所示:
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()
有了这些信息,我应该能够选择正确的值(索引对)并构建所需的数据框。但是,我无法管理它......
任何帮助表示赞赏。
谢谢
解决方案
您可以使用idxmax
withreset_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 indexing
with 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