Панды - получение предыдущего результата / строки от каждого пользователя - PullRequest
0 голосов
/ 23 января 2019

Я новичок в Пандах.

У меня есть фрейм данных, который выглядит следующим образом (только намного больше):

    Horses        RaceDate Position
1   RedHorse      1/2/00   2
2   BlueHorse     1/2/00   6
3   YellowHorse   1/2/00   7
4   RedHorse      15/1/00  3

Я хочу добавить столбец для предыдущих результатов. Так что мой фрейм данных может выглядеть так:

    Horses        RaceDate Position   PrevPosition
1   RedHorse      1/2/00   2          3
2   BlueHorse     1/2/00   6          -
3   YellowHorse   1/2/00   7          -
4   RedHorse      15/1/00  3          -

Я пробовал следующее:

def prevRuns(horseName, raceDate):
    horseDf = df.loc[df['Horse'] == horseName]
    currentRace = horseDf.index[horseDf['RaceDate'] == raceDate]

    if len(horseDf.index) >= currentRace:
        return horseDf.at[currentRace+1,'Position']
    else:
        return 0


df['prevRun'] = df['Horse'].apply(prevRuns, raceDate = df['RaceDate'])

Но это не работает.

ValueError: Can only compare identically-labeled Series objects

Почему это не работает?

Есть ли более элегантный способ добиться того, что я пытаюсь сделать?

1 Ответ

0 голосов
/ 23 января 2019

Вы можете использовать groupby + shift:

# convert dates to datetime and sort descending
df['RaceDate'] = pd.to_datetime(df['RaceDate'], dayfirst=True)
df = df.sort_values('RaceDate', ascending=False)

# groupby and shift for previous position
df['PrevPosition'] = df.groupby('Horses')['Position'].shift(-1)

print(df)

        Horses   RaceDate  Position  PrevPosition
1     RedHorse 2000-02-01         2           3.0
2    BlueHorse 2000-02-01         6           NaN
3  YellowHorse 2000-02-01         7           NaN
4     RedHorse 2000-01-15         3           NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...