我有一个看起来很简单的问题,但是我还没能在这个平台上找到答案。我在不同的日子用不同的设备做过gps跟踪实验。
我现在有两个数据帧。第一个数据帧包含带有gpsnumber、时间戳、经度和纬度的gps点。第二个数据帧包含我们在分发时和gpstracker中记录的有关实验的信息。这里有实验号、使用的gps-number、hand_out_time和hand_in_time列。
我有两个目标:(1)我想要将gps数据与正确的实验相匹配,(2)我想删除所有不在实验时间内的行。
这看起来像这样:
df:
GPS_number date_time lon lat
744 16 2019-12-12 10:58:41 4.913158 52.367210
745 16 2019-12-12 11:10:05 4.913158 52.367210
746 16 2019-12-12 11:10:56 4.913085 52.367130
747 16 2019-12-12 11:29:31 4.913085 52.367130
748 16 2019-12-12 11:29:36 4.913191 52.367092 df2:
Measurement GPS_number Visitor_type Hand_out_time Hand_in_time
0 1 3 Tourist 2019-12-12 11:35:00 2019-12-12 12:16:00
1 2 3 Tourist 2019-12-12 12:47:00 2019-12-12 14:34:00
2 3 5 Member 2019-12-12 11:10:00 2019-12-12 13:36:00
3 4 6 Member 2019-12-12 11:27:00 2019-12-12 12:55:00
4 5 6 Tourist 2019-12-12 12:54:00 2019-12-12 15:22:00我试着使用口罩,但这不起作用,因为我猜它不能正确地匹配出手时间和上手时间。
mask = (df['GPS_number'] = (df2['GPS_number'] & (df['date_time'] > df2['Hand_out_time'] & (df['date_time'] < df2['Hand_in_time)
df = df[mask] 如果有人能教我怎么做就太好了。谢谢。
发布于 2020-01-08 00:30:02
一些类似的东西可能会起作用,更多的是一个想法,而不是为你的df提供全功能代码的承诺。
df = df.merge(
df[['Measurement','GPS_number','Visitor_type','Hand_out_time','Hand_in_time']],
left_on = 'GPS_number',
right_on = 'GPS_number',
how = 'left'
)
mask = ((df['date_time'] > df['Hand_out_time']) & (df['date_time']<df['Hand_in_time']))
df = df[mask]我不相信mask能像你最初拥有的那样在多个df中工作。在我看来,您要做的事情就像是具有多个on条件的SQL left join的Python等价物。这里的思想是合并一个简单的匹配,这将产生一个具有多个重复条目的非常笨重的数据集。然后,将掩码应用于重新定义的df将有点像添加额外的on条件,并且有望得到您想要的结果。
另一个潜在的错误可能是列之间的数据类型不一致。
如果以上不能完成工作,评论错误信息或不正确的结果,我会尝试相应的编辑。
https://stackoverflow.com/questions/59632003
复制相似问题