代码之家  ›  专栏  ›  技术社区  ›  Chopin

查找pandas df[关闭]中最大值旁边的列的值

  •  0
  • Chopin  · 技术社区  · 7 年前

    我正在努力解决一个问题。我有一个熊猫df,包含来自不同玩家的X,Y坐标。我可以使用 .max(axis = 1) .

    我希望实现的是创建一个新列,其中包含最大值旁边的值。也就是说,如何查找最大X坐标列的相邻值。因此,对于任何给定的行,都是在最大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语句和where函数,但不知道它们是从哪里开始的,因为我对python还不熟悉。

    1 回复  |  直到 7 年前
        1
  •  1
  •   jpp    7 年前

    这里有一种方法,虽然它可能不是最有效的:

    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)