通过两个Pandas DataFrames进行高效循环

时间:2013-04-05 13:58:02

标签: python pandas

我有两个pandas数据帧:

第一帧包含时间戳(日期+时间)和四组纬度/长度对,用于定义地球上一个方框的角落。

第二帧包含时间戳和一个标记事件的纬度/长度对。

我想知道,对于每个事件,它是否属于任何“地球上的盒子”,如果是,那么哪些以及时间戳之间的delta_t是什么。

我能想到这样做的唯一方法是逐行循环第二帧,并与第一帧进行比较。我希望有更多的pythonic方式,但没有任何想法。有什么想法吗?

谢谢,

SH

1 个答案:

答案 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

的原始日期列中将未选择的事件设置为nan
C['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
相关问题