我正在努力解决问题。我有一个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的新手。
答案 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)