Добавить значение из индекса серии в строку равного значения в Pandas DataFrame - PullRequest
0 голосов
/ 18 мая 2018

У меня возникла небольшая проблема с добавлением нового столбца в мой Pandas DataFrame: у меня есть DataFrame, в котором каждая строка представляет запись данных о местоположении и отметку времени.Эти записи относятся к поездкам, поэтому каждая строка также содержит идентификатор поездки.Представьте, что DataFrame выглядит примерно так:

   TripID  Lat    Lon    time
0  42      53.55  9.99   74
1  42      53.58  9.99   78
3  42      53.60  9.98   79
6  12      52.01  10.04  64
7  12      52.34  10.05  69

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

 lengths = df['TripID'].value_counts()

Тогда моя идея состояла в том, чтобы добавить дополнительный столбец в DataFrame и заполнить его значениями из этой Серии, соответствующей поездке.идентификатор каждой записи.Тогда я смог бы избавиться от всех строк, в которых значение столбца length слишком мало.

Однако я не могу найти способ получить значения длины в правильныестрок.Будет ли у кого-нибудь идея для этого или даже лучший подход ко всей проблеме?

Большое спасибо!

РЕДАКТИРОВАТЬ:

Мой желаемыйвывод должен выглядеть примерно так:

   TripID  Lat    Lon    time  length
0  42      53.55  9.99   74    3
1  42      53.58  9.99   78    3
3  42      53.60  9.98   79    3
6  12      52.01  10.04  64    2
7  12      52.34  10.05  69    2

Ответы [ 3 ]

0 голосов
/ 18 мая 2018

Вы можете использовать groupby и transform для непосредственного добавления столбца длин в DataFrame, например:

df["lengths"] = df[["TripID", "time"]].groupby("TripID").transform("count")
0 голосов
/ 19 мая 2018

Мне удалось найти ответ на мой вопрос, который также немного лучше, чем мой первоначальный подход:

df = df.groupby('TripID').filter(lambda x: len(x) > 2)

Это можно найти в документации Pandas .Он избавляет от всех групп, в которых есть 2 или менее элементов, или для поездок, которые имеют 2 записи или меньше в моем случае.

Надеюсь, это поможет кому-то еще.

0 голосов
/ 18 мая 2018

Если я правильно понимаю, чтобы узнать продолжительность поездки, вы бы хотели получить разницу между максимальным и минимальным временем для каждой поездки.Вы можете сделать это с помощью оператора groupby.

# Groupby, get the minimum and maximum times, then reset the index
df_new = df.groupby('TripID').time.agg(['min', 'max']).reset_index()
df_new['length_of_trip'] = df_new.max - df_new.min
df_new = df_new.loc[df_new.length_of_trip > 90] # to pick a random number

Это даст вам все строки с длиной поездки, превышающей необходимую сумму, включая идентификаторы поездки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...