Patrzę na niektóre dane dotyczące koszykówki, gdzie mam ramkę danych, która będzie wyglądać (tylko dla jednej drużyny ... małe kroki)

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

Tworzę kolumnę dla odległości od Ball = 1 (uogólniona na wiele PlayId):

df['DistanceToBall'] = np.abs(df.Pos-df.Pos[df.groupby('PlayId')['Ball'].transform('idxmax')].reset_index(drop=True))

Następnie chcę to zrobić w jednym wierszu, który zawiera informacje Ball = 1

newdf = df.loc[df.Ball==1,:]

Teraz chcę dodać kolumny dotyczące informacji o pozycji i prędkości w oparciu o DistanceToBall. Moje nowe kolumny byłyby najbliższe1, najbliższe2, najbliższe3, najbliższe4, które miałyby wartości ich pozycji, więc w kolejności (15,4,1,20). Nie jestem pewien, jak to zrobić, zwłaszcza w przypadku, gdy mam wiele różnych „PlayId”.

EDYCJA: Oczekiwany wynik:

 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
yankeefan11 19 listopad 2019, 17:54
Czy możesz nam pokazać swoje oczekiwane wyniki?
 – 
Umar.H
19 listopad 2019, 18:00
Zmodyfikowałem moją odpowiedź na podstawie Twojej edycji. Daj znać czy działa.
 – 
Nicolas Gervais
19 listopad 2019, 18:16

1 odpowiedź

To zostanie dołączone do newdf czterech najbliższych graczy Pos, posortowanych według 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
1
Nicolas Gervais 19 listopad 2019, 18:11
Więc to zdecydowanie działa w tym przypadku. (Można też po prostu użyć 1 pętli, jak sądzę). Jestem ciekawy, jak zaimplementować groupby (bez zapętlania czasu) w części sort_values
 – 
yankeefan11
19 listopad 2019, 18:21