如何高效实现:根据每行最大kills值获取对应玩家名称?
高效实现多级列DataFrame新增HKP列的方案
问题场景
你有一个多级列结构的DataFrame,包含各玩家的kills(击杀数)与name(名称)列,需要新增HKP列,每行值为该行kills最大的玩家名称。当前通过循环取值的实现速度过慢,需要更高效的方法。
高效实现方案
方法一:利用xs与lookup
# 提取所有玩家的kills数据,找到每行最大值对应的玩家索引 max_kill_player = final_df.xs('kills', axis=1, level=1).idxmax(axis=1) # 直接通过lookup提取对应玩家的name值,赋值给HKP列 final_df['HKP'] = final_df.xs('name', axis=1, level=1).lookup(final_df.index, max_kill_player)
方法二:基于多级列索引的直接映射
# 定位每行kills最大的列索引,提取玩家层级 max_kill_col_idx = final_df.loc(axis='columns')[:, 'kills'].idxmax(axis=1) player_names = final_df.loc(axis='columns')[:, 'name'] # 按索引匹配对应名称 final_df['HKP'] = player_names.lookup(final_df.index, max_kill_col_idx.get_level_values(0))
为什么这两种方法更快
这两种方案都采用了pandas的向量化操作,完全避免了Python层面的循环遍历。pandas的内置方法底层由C实现,处理大规模数据时,速度会比手动循环快几个数量级。
内容的提问来源于stack exchange,提问作者Forevermore
相关产品推荐
相关产品推荐

