我尝试在网上寻找解决方案,但找不到。我有一个数据框,其中有 10 个单独的 id 列,每个 ID 有 10 个单独的对应值列。下面显示了一个简短的示例例子:player_id_1 player_1_x player_id_2 player_2_x shooter_id 300 10 301 12 301299 11 300 13 299我想创建一个新列,该列从“shooter_id”和任何“player_id”列之间的相应 ID 匹配中获取值列,如下所示:player_id_1 player_1_x player_id_2 player_2_x shooter_id shooter_x300 10 301 12 301 12 299 11 300 13 299 11我真的一直在努力完成这项工作,我不确定我是否需要在其内部进行合并,for循环数据帧,或者.apply..任何见解都会非常有帮助!
1 回答
婷婷同学_
TA贡献1844条经验 获得超8个赞
让我们filter像player_id列一样,使用.eq+idxmax来获取player_id找到匹配项的列,最后使用lookup来获取对应于 的值player_id's:
c = df.filter(like='player_id')\
.eq(df['shooter_id'], axis=0)\
.idxmax(1).str.replace('_id', '').add('_x')
df['shooter_x'] = df.lookup(df.index, c)
player_id_1 player_1_x player_id_2 player_2_x shooter_id shooter_x
0 300 10 301 12 301 12
1 299 11 300 13 299 11
添加回答
举报
0/150
提交
取消