【发布时间】:2019-05-30 10:01:53
【问题描述】:
我想对两个数据帧执行外连接,其中键是 id: int 和 date: pd.Timestamp 对象。最重要的是,如果ids 相同(正常行为)并且日期相等(正常行为)或日期之间的差异最大为 30 天,我希望这些键被视为相等。然后,当执行外连接时,应该从右边的数据帧中取出date。下面是一个例子:
left = pd.DataFrame({"id": [1, 2, 3], "date": [pd.Timestamp(2002, 3, 25), pd.Timestamp(2003, 4, 4), pd.Timestamp(2004, 6, 6)], "val_3": [77, 88, 11]})
right = pd.DataFrame({"id": [1, 2, 3], "date": [pd.Timestamp(2002, 3, 10), pd.Timestamp(2003, 4, 27), pd.Timestamp(2004, 5, 5)], "val_1": [99, 66, 33], "val_2": [101, 102, 103]})
而join后的结果应该是:
result = pd.DataFrame({"id": [1, 2, 3, 3], "date": [pd.Timestamp(2002, 3, 10), pd.Timestamp(2003, 4, 27), pd.Timestamp(2004, 6, 6), pd.Timestamp(2004, 5, 5)], "val_3": [77, 88, 11, np.nan], "val_1": [99, 66, np.nan, 33], "val_2": [101, 102, np.nan, 103]})
期待您的回答!
【问题讨论】:
-
如果右侧框架中的 2 个日期落在左侧框架中的一个日期的 30 天内相同 id 会发生什么?我们应该在左侧框架中获取 2 行日期,还是只获取 30 天窗口内的第一个或最后一个日期?
标签: python pandas outer-join