--问题陈述描述:- 我有两个 df - df1 和 df2 .DF1 包含 id=7 的数量购买数据,DF2 包含数据 相同 ID 的售出数量 = 7。df1 和 df2 都根据日期排序,即从 从最早到最晚的日期,每次只买入或卖出 1 个数量。
--DF1
date_buy | id | qty_buy | rolling_sum_qty_buy |
---|---|---|---|
2019-07-30 | 7 | 1 | 1 |
2019-10-20 | 7 | 1 | 2 |
2020-01-17 | 7 | 1 | 3 |
2020-02-15 | 7 | 1 | 4 |
2020-02-15 | 7 | 1 | 5 |
2020-02-15 | 7 | 1 | 6 |
2021-07-14 | 71 | 7 | |
2021-09-19 | 7 | 1 | 8 |
2021-12-25 | 7 | 1 | 9 |
2021-12-30 | 7 | 1 | 10 |
2022-02-10 | 7 | 1 | 11 |
2022-03-15 | 7 | 1 12 | |
2022-03-15 | 7 | 1 | 13 |
2022-06-14 | 7 | 1 | 14 |
我无法得到完整的答案,但它可能会有所帮助:
pd.merge_asof
本质上是在最近的日期时间合并。如果将格式DataFrame
datetime64[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
.
希望这仍然可以帮助您走上正确的轨道:)