Pandas Groupby:Groupby条件语句

时间:2019-03-22 18:39:16

标签: pandas group-by pandas-groupby latitude-longitude

我正在尝试从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 :(得分: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")