我有一个带有多索引的数据框,如下所示:
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()
有了这些信息,我应该能够选择正确的值(索引对)并构建所需的数据框。但是,我无法管理.....
任何帮助表示赞赏。
谢谢
答案 0 :(得分:1)
您可以将idxmax
与reset_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 indexing
与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