我有两个熊猫数据框:
第一帧包含一个时间戳(日期 + 时间)和四组纬度/经度对,它们定义了地球上一个盒子的角。
第二帧包含一个时间戳和一个标记事件的纬度/经度对。
我想知道,对于每个事件,它是否落在任何“地球上的盒子”内,如果是,哪些是时间戳之间的 delta_t。
我能想到的唯一方法是逐行遍历第二帧,并与第一帧进行比较。我希望有一种更蟒蛇的方式,但什么都没有想到。有任何想法吗?
谢谢,
上海
这是一个类似的问题:Iteration 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的原始日期列上将未选择的事件设置为nan
C['date_B'][~C['is_included']] = np.nan
再次向前填充 date_B
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