从现有行生成新的Dataframe列

2024-09-27 00:21:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在查看一些篮球数据,其中我有一些数据框,看起来像(只针对一支球队…小步)

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]})

我创建了一个列,表示与球的距离=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,:]

现在,我想添加关于Pos和基于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

Tags: 数据pos信息dfplayerspeedball球队
1条回答
网友
1楼 · 发布于 2024-09-27 00:21:37

这将附加到newdf最近的4个玩家的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

相关问题 更多 >

    热门问题