嗨,我將嘗試解釋我面臨的問題。
我有一個資料框(df),其中包含以下內容:
| ID | 日期 (dd-mm-yyyy) |
|---|---|
| AAA | 01-09-2020 |
| AAA | 01-11-2020 |
| AAA | 18-03-2021 |
| AAA | 2022 年 10 月 10 日 |
| BBB | 01-01-2019 |
| BBB | 01-03-2019 |
| CCC | 01-05-2020 |
| CCC | 01-07-2020 |
| CCC | 01-08-2020 |
| CCC | 01-10-2021 |
我創建了另一個資料框(df2),每個 ID 注冊的第一個日期(t)和 t 3 個月:
| ID | T(第一次發生的日期) | T 3 |
|---|---|---|
| AAA | 01-09-2020 | 01-12-2020 |
| BBB | 01-01-2019 | 01-03-2020 |
| CCC | 01-05-2020 | 01-08-2020 |
我正在努力的理想輸出是根據 df2("T??" & "T 3) 中定義的兩個日期過濾器過濾 df:
例如AAA = AAA > T & AAA < T 3
| ID | 日期 (dd-mm-yyyy) |
|---|---|
| AAA | 01-11-2020 |
| BBB | 01-03-2019 |
| CCC | 01-07-2020 |
| CCC | 01-08-2020 |
解決這個問題的最佳方法是什么?任何幫助表示贊賞!
uj5u.com熱心網友回復:
IIUC,您可以pandas.merge_asof使用allow_exact_matches=False:
(pd.merge_asof(df1.sort_values(by='Date'), df2.sort_values(by='T'),
allow_exact_matches=False,
by='ID', left_on='Date', right_on='T')
.loc[lambda d: d['Date'] <= d['T 3']]
)
注意。當您描述“< T 3”時,T 3 的確切條件尚不清楚,但顯示的輸出具有“<= T 3”,只需在loc
輸出:
ID Date T T 3
1 BBB 2019-03-01 2019-01-01 2020-03-01
3 CCC 2020-07-01 2020-05-01 2020-08-01
4 CCC 2020-08-01 2020-05-01 2020-08-01
6 AAA 2020-11-01 2020-09-01 2020-12-01
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/461635.html
上一篇:日期谷歌表之間的值
下一篇:pl/SQLfor回圈
