gpt4 book ai didi

python - 带有公差参数的 Pandas merge_asof 失败

转载 作者:太空宇宙 更新时间:2023-11-04 11:09:48 25 4
gpt4 key购买 nike

我尝试使用 merge_asof 加入 2 个数据帧功能。第一个数据框包含一行失败的组件。

>>> import pandas as pd
>>> from datetime import datetime

>>> failed_date_str = '2019-05-09'
>>> failed_date = datetime.strptime(failed_date_str, '%Y-%m-%d')
>>> failed = pd.DataFrame([{"component": "a1", "failed_date": failed_date}])
>>> failed
component failed_date
0 a1 2019-05-09

第二个数据框包含针对该组件的工单/原因列表。

>>> future_failed_date = failed_date + pd.Timedelta(weeks=1)
>>> cases = pd.DataFrame(
... [
... {
.. "component": "a1",
... "tickets": 'r'+str(o),
... "created_date": future_failed_date - pd.Timedelta(days=o)
... }
... for o in range(0, 10) if o!=7
... ]
... ).sort_values(by="created_date")
>>> cases
component created_date tickets
8 a1 2019-05-07 r9
7 a1 2019-05-08 r8
6 a1 2019-05-10 r6
5 a1 2019-05-11 r5
4 a1 2019-05-12 r4
3 a1 2019-05-13 r3
2 a1 2019-05-14 r2
1 a1 2019-05-15 r1
0 a1 2019-05-16 r0

请注意,组件 a1 在 2015 年 5 月 9 日失败,并且在 failed_date 之前和之后创建了多个票证。

我想在失败日期后的 2 天内获得最近的一组门票 +/-。我尝试以下操作:

>>> pd.merge_asof(
... failed,
... cases,
... by="component",
... left_on="failed_date",
... right_on="created_date",
... direction="nearest",
... tolerance=pd.Timedelta(days=2)
... )
component failed_date created_date tickets
0 a1 2019-05-09 2019-05-08 r8

因为我已指定最近的方向和 2 天的公差,我希望我会得到 4 行对应于日期(2019-05-07 到 2019-05-11)但我只得到一行如上所示。看起来我不明白 merge_asof 中方向/公差参数的用法。有人可以解释我做错了什么吗?

如果有帮助,我的pandas和python版本如下:

>>> pd.__version__
'0.24.2'
>>> import sys
>>> sys.version_info
sys.version_info(major=3, minor=7, micro=3, releaselevel='final', serial=0)

最佳答案

你的 df 的顺序对于 merge_asof 很重要,它将在 default 上进行左合并。 :

This is similar to a left-join except that we match on nearest key rather than equal keys

pd.merge_asof(
cases,
failed,
by="component",
right_on="failed_date",
left_on="created_date",
direction='nearest',
tolerance=pd.Timedelta(days=2)
)
Out[297]:
component tickets created_date failed_date
0 a1 r9 2019-05-07 2019-05-09
1 a1 r8 2019-05-08 2019-05-09
2 a1 r6 2019-05-10 2019-05-09
3 a1 r5 2019-05-11 2019-05-09
4 a1 r4 2019-05-12 NaT
5 a1 r3 2019-05-13 NaT
6 a1 r2 2019-05-14 NaT
7 a1 r1 2019-05-15 NaT
8 a1 r0 2019-05-16 NaT

关于python - 带有公差参数的 Pandas merge_asof 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58565250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com