我正在研究一些篮球数据,其中有一些数据框(仅适用于一支球队...婴儿步)
df = pd.DataFrame({'PlayId':[1,1,1,1,1],'Player':['A','B','C','D','E'],'Ball':[0,0,1,0,0],'Pos':[1, 4, 10, 15, 20 ],'Speed':[1,2,3,4,5]})
我创建一个列,表示距Ball = 1的距离(概括为许多PlayId) :
df['DistanceToBall'] = np.abs(df.Pos-df.Pos[df.groupby('PlayId')['Ball'].transform('idxmax')].reset_index(drop=True))
接下来,我想将其放入包含Ball = 1信息的单行中
newdf = df.loc[df.Ball==1,:]
现在,我想基于DistanceToBall添加有关位置和速度信息的列。我的新列将是closest1,closest2,closest3,closest4,这些列将具有其位置的值,因此顺序为(15,4,1,20)。我不确定该怎么做,尤其是在我有许多不同的“ PlayId”的情况下。
编辑:预期输出:
PlayId Player Ball Pos Speed DistanceToBall closest1 closest2 closest3 closest4 speed1 speed2 speed3 speed4
2 1 C 1 10 3 0 15 4 1 20 4 2 1 5
答案 0 :(得分:1)
这将附加到newdf
的四个最接近的玩家Pos
中,并按DistanceToBall
排序:
for i in range(4):
newdf.loc[:, 'closest{}'.format(i+1)] = \
df.sort_values(by='DistanceToBall')['Pos'].values[i]
for i in range(4):
newdf.loc[:, 'speed{}'.format(i + 1)] = \
df.sort_values(by='DistanceToBall')['Speed'].values[i]
Out[22]:
PlayId Player Ball Pos Speed ... closest4 speed1 speed2 speed3 speed4
2 1 C 1 10 3 ... 1.0 3.0 4.0 2.0 1.0