从现有行生成新的数据框列

时间:2019-11-19 14:54:07

标签: python pandas

我正在研究一些篮球数据,其中有一些数据框(仅适用于一支球队...婴儿步)

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

1 个答案:

答案 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