首页 > 解决方案 > 从现有行生成新的 Dataframe 列

问题描述

我正在研究一些篮球数据,其中我有一些看起来像的数据框(仅适用于一个团队......婴儿步骤)

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 的 Pos 和 Speed 信息的列。我的新列将是最接近的 1、最接近的 2、最接近的 3、最接近的 4,它们将具有它们的位置值,因此按顺序排列(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

标签: pythonpandas

解决方案


这将附加到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

推荐阅读