连接两个数据帧 df1 和 df2,其中 df2 中的日期应该是 df1 中日期之后的第一个日期,即 df1 中日期之后



--问题陈述描述:- 我有两个 df - df1 和 df2 .DF1 包含 id=7 的数量购买数据,DF2 包含数据 相同 ID 的售出数量 = 7。df1 和 df2 都根据日期排序,即从 从最早到最晚的日期,每次只买入或卖出 1 个数量。

--DF1

17
date_buyidqty_buyrolling_sum_qty_buy
2019-07-3071
2019-10-20712
2020-01-17713
2020-02-15714
2020-02-15715
2020-02-15716
2021-07-1417
2021-09-19718
2021-12-25719
2021-12-307110
2022-02-107111
2022-03-1571 12
2022-03-157113
2022-06-147114

我无法得到完整的答案,但它可能会有所帮助:

pd.merge_asof本质上是在最近的日期时间合并。如果将格式DataFramedatetime64[ns]

df1["date_sold"] = pd.to_datetime(df1["date_sold"], format="%d-%m-%Y", exact=False)
df2["date_sold"] = pd.to_datetime(df2["date_sold"], format="%d-%m-%Y", exact=False)

您可以像这样合并它们。

Out[32]: 
date_buy  id_x  qty_buy  rolling_sum_qty_buy  date_sold  id_y  qty_sold  rolling_sum_qty_sold
0  2019-07-30     7        1                    1 2019-08-01   7.0       1.0                   1.0
1  2019-10-20     7        1                    2 2019-12-27   7.0       1.0                   3.0
2  2020-01-17     7        1                    3 2020-02-01   7.0       1.0                   4.0
3  2020-02-15     7        1                    4 2021-07-25   7.0       1.0                   6.0
4  2020-02-15     7        1                    5 2021-07-25   7.0       1.0                   6.0
5  2020-02-15     7        1                    6 2021-07-25   7.0       1.0                   6.0
6  2021-07-14     7        1                    7 2021-07-25   7.0       1.0                   6.0
7  2021-09-19     7        1                    8 2022-04-25   7.0       1.0                  11.0
8  2021-12-25     7        1                    9 2022-04-25   7.0       1.0                  11.0
9  2021-12-30     7        1                   10 2022-04-25   7.0       1.0                  11.0
10 2022-02-10     7        1                   11 2022-04-25   7.0       1.0                  11.0
11 2022-03-15     7        1                   12 2022-04-25   7.0       1.0                  11.0
12 2022-03-15     7        1                   13 2022-04-25   7.0       1.0                  11.0
13 2022-06-14     7        1                   14        NaT   NaN       NaN                   NaN

这将匹配每个buy与第一个sold。例如,它能够跳过2019-09-15的销售。但是,根据定义,它将执行左连接,因此如果元素匹配多个元素,则只需重复元素。因此,它不是rolling_sum_qty_sold = 6, 7, 8, 9而是给出6, 6, 6, 6,而不是11, NaN, NaN, ...它只是不断重复11.

希望这仍然可以帮助您走上正确的轨道:)

相关内容

  • 没有找到相关文章

最新更新