我正在尝试从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()
答案 0 :(得分:0)
我会做以下事情:
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")