我有两个pandas数据帧:
第一帧包含时间戳(日期+时间)和四组纬度/长度对,用于定义地球上一个方框的角落。
第二帧包含时间戳和一个标记事件的纬度/长度对。
我想知道,对于每个事件,它是否属于任何“地球上的盒子”,如果是,那么哪些以及时间戳之间的delta_t是什么。
我能想到这样做的唯一方法是逐行循环第二帧,并与第一帧进行比较。我希望有更多的pythonic方式,但没有任何想法。有什么想法吗?
谢谢,
SH
答案 0 :(得分:0)
以下是一个类似的问题:Iterating through a pandas dataframe
我认为这会奏效。伪编码。你需要0.11-dev
两个帧都有一个日期时间索引,A是你的第一个,B更短,因为它只有你的事件。
在A上,将索引设置为列A['date'] = A.index
在B上,将索引设置为列B['date'] = B.index
内连接A和B,然后填充B
C = A.join(B).ffill()
如果包含您的事件,您需要一些布尔逻辑,例如:
C['is_included'] = (C['A_lat'] > C['B_lat']) & (C['A_long'] > C['B_long'])...etc
因此,当is_included为True时,您需要差异时间,但需要前一个事件
在B
的原始日期列中将未选择的事件设置为nanC['date_B'][~C['is_included']] = np.nan
再次向前填充日期_
C['date_B'] = C['date_B'].ffill()
如果你现在从date_A中减去date_B,我想你会得到你的timedelta
C['delta'] = C['date_B']-C['date_A']
然后
C[C['is_included']] is your answer, and delta is the timedelta