Pandas Groupby: условное заявление Groupby - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь определить местоположение остановок по данным GPS, но мне необходимо учесть некоторые отклонения GPS.

Я определил остановки и изолировал их в новом кадре данных:

df['Stopped'] = (df.groupby('DAY')['LAT'].diff().abs() <= 0.0005) & (df.groupby('DAY')['LNG'].diff().abs() <= 0.0005)

df2 = df.loc[(df['Stopped'] == True)]

Теперь я могу пометить группы, которые имеют точное совпадение в координатах, используя:

df2['StoppedEvent'] = df2.groupby(['LAT','LNG']).ngroup()  

Но я хочу сгруппировать по тем же условиям Stopped.Примерно так, но это работает:

df2['StoppedEvent'] = df2.groupby((['LAT','LNG']).diff().fillna(0).abs() <= 0.0005).ngroup()    

1 Ответ

0 голосов
/ 22 марта 2019

Я бы сделал что-то вроде следующего:

df['Stopped'] = (df.groupby('DAY')['LAT'].diff().abs() <= 0.0005)\
                & (df.groupby('DAY')['LNG'].diff().abs() <= 0.0005)
df["Stopped_Group"] = (~df["Stopped"]).cumsum()
df2 = df.loc[df['Stopped']]

Теперь у вас будет столбец "Stopped_Group", который является постоянным в наборе рядов, близких друг к другу, как определено вашимлогика.В исходном кадре данных, df, этот столбец не будет иметь никакого значения для строк, которые соответствуют движению.

Чтобы получить желаемый результат (если я вас правильно понимаю), сделайте что-то вроде следующего:

df2["Stopped_Duration"] = df2.groupby("Stopped_Group").transform("size")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...