找到pandas df中最大值旁边的列的值

时间:2018-01-25 00:09:33

标签: python pandas max where

我正在努力解决问题。我有一个pandas df,它包含来自不同玩家的X,Y坐标。我可以使用.max(axis = 1)获取行的最大X坐标值。

我希望实现的是创建一个包含最大值旁边值的新列。也就是说,如何找到max X坐标列的相邻值。因此,任何给定行的Max X坐标旁边都是Y坐标。

注意:永远不会复制最大值。

见下文。

df
Player 1_X  Player 1_Y  Player 2_X  Player 2_Y  Player 3_X  Player 3_Y
6           7           5           8           **9**       3
5           7           6           7           **8**       2
4           6           **7**       7             6         1 

预期df:

df1
Player 1_X  Player 1_Y  Player 2_X  Player 2_Y  Player 3_X  Player 3_Y New Column 
6           7           5           8           9           3          3
5           7           4           7           8           2          2
4           7           5           7           6           1          7

我已经尝试了一个if语句,但我不知道函数是什么,因为我是python的新手。

1 个答案:

答案 0 :(得分:1)

这是一种方式,认为它可能不是最有效的方法:

import pandas as pd

cols = ['Player '+str(x)+'_'+y for x in range(1, 4) for y in ('X', 'Y')]
x_cols = ['Player '+str(x)+'_X' for x in range(1, 4)]

df = pd.DataFrame([[6, 7, 5, 8, 9, 3],
                   [5, 7, 6, 7, 8, 2],
                   [4, 6, 7, 7, 6, 1]],
                  columns=cols)

df['usecol'] = df[x_cols].idxmax(axis=1).apply(lambda x: cols[cols.index(x)+1])
df['New Column'] = df.apply(lambda x: x[x['usecol']], axis=1)
df = df.drop('usecol', 1)