根据另一个df中最小/最大日期范围内的日期在熊猫中合并/加入

时间:2019-06-15 07:29:04

标签: python pandas dataframe

我遵循的这个线程无法完全回答我的解决方案:Best way to join / merge by range in pandas

我确定我的最小/最大是DateTime,但这可以正常工作。

可接受的答案对我来说很好,但是我认为可以针对我的用例进行优化。

实际上,它将创建一个巨型datframe,该巨型datframe将A和B df连接起来,而我只需要A_id和B_id完全匹配的行。

我原来的df有79k行。处理完之后

C = pd.DataFrame(
    np.column_stack([A.values[i], B.values[j]]),
    columns=A.columns.append(B.columns)
)

我的df为2.3 m行,当我仅保留C[C['A_id'] == C['B_id']]时,它会返回到我期望的74k行。

如何在第一次操作中直接进行操作,同时改善处理时间?

谢谢

1 个答案:

答案 0 :(得分:0)

我找到了方向。

我添加了系列,并在相关主题的i, j = np.where((a[:, None] >= bl) & (a[:, None] <= bh))中添加了条件

现在我有

a = A.A_value.values
aId = A.A_id.values
bId = B.B_id.values
bh = B.B_high.values
bl = B.B_low.values

i, j = np.where((a[:, None] >= bl) & (a[:, None] <= bh) & (aId[:, None] == bId)

对于我的80k行,这几乎是瞬时的,而之前花了3秒