MultiIndex DataFrame列最大值查找及指定数据集可复现代码请求
Got it,我来帮你解决这两个问题,直接上干货:
1. 数据集可复现代码
你提供的energy列数据不完整,我补全了合理的数值,下面是可以直接运行的完整代码,生成你需要的DataFrame并设置MultiIndex:
import pandas as pd # 完整构建数据集字典 data = { 'player': ['a']*9 + ['b']*9 + ['c']*9, 'week': ['1','1','1','2','2','2','3','3','3']*3, 'category': ['RES','VIT','MATCH']*9, 'energy': [75,54,87,68,59,92,72,61,89, 80,57,90,73,60,88,77,55,93, 78,52,85,65,58,91,70,63,86] } # 创建基础DataFrame df = pd.DataFrame(data) # 转换为MultiIndex DataFrame(层级顺序可根据需求调整) multi_index_df = df.set_index(['player', 'week', 'category'])
运行这段代码后,multi_index_df就是你需要的多层索引DataFrame,索引层级为player→week→category。
2. 查找某列最大值及对应相关值
这里分两种常见场景来处理:
场景1:全局查找Energy列的最大值及所有对应行
如果要找整个DataFrame中energy列的最大值,并且返回所有达到该最大值的行(可能有多行),可以这么做:
# 获取Energy列的全局最大值 max_energy_val = multi_index_df['energy'].max() # 筛选出所有Energy等于最大值的行 max_energy_rows = multi_index_df[multi_index_df['energy'] == max_energy_val] # 输出结果 print(f"Energy列的全局最大值为: {max_energy_val}") print("对应所有相关数据:") print(max_energy_rows)
运行后会得到所有符合条件的行,包括对应的player、week、category索引值和energy值。
场景2:按层级分组查找最大值(比如每个Player的最大Energy)
如果需要按某个索引层级(比如player)分组,查找每个组内的最大值及对应行,可以用groupby配合idxmax:
# 按player分组,获取每个player的最大Energy值 player_max_energy = multi_index_df.groupby(level='player')['energy'].max() # 获取每个player对应最大Energy的完整行数据 player_max_rows = multi_index_df.loc[multi_index_df.groupby(level='player')['energy'].idxmax()] # 输出结果 print("每个Player的最大Energy及对应数据:") print(player_max_rows)
这种方式可以灵活适配不同的分组需求,比如按week分组查找每周的最大Energy,只需要把level='player'改成level='week'即可。
内容的提问来源于stack exchange,提问作者vishnu prashanth
相关产品推荐
相关产品推荐

