嗨,我会努力解释我面临的问题.

我有一个数据帧(df),具有以下内容:

ID Date (dd-mm-yyyy)
AAA 01-09-2020
AAA 01-11-2020
AAA 18-03-2021
AAA 10-10-2022
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 (First Date Occurred) 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:

e、 g.AAA=AAA>T&AAA<T+3

ID Date (dd-mm-yyyy)
AAA 01-11-2020
BBB 01-03-2019
CCC 01-07-2020
CCC 01-08-2020

最好的方法是什么?感谢您的帮助!

推荐答案

IIUC,你可以用pandas.merge_asofallow_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']]
)

NB. the exact condition on the T+3 is unclear as you describe "< T+3" but the shown output has "<= T+3", just chose what you want (< or <=) in the 100

输出:

    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

Python相关问答推荐

如何将 map 数组组合到pyspark中每列的单个 map 中

Altair -箱形图边界设置为黑色,中线设置为红色

这家einsum运营在做什么?E = NP.einsum(aj,kl-il,A,B)

使用matplotlib pcolormesh,如何停止从一行绘制的磁贴连接到上下行?

如何使用矩阵在sklearn中同时对每个列执行matthews_corrcoef?

TARete错误:类型对象任务没有属性模型'

使用numpy提取数据块

Excel图表-使用openpyxl更改水平轴与Y轴相交的位置(Python)

2D空间中的反旋算法

Mistral模型为不同的输入文本生成相同的嵌入

用Python解密Java加密文件

Julia CSV for Python中的等效性Pandas index_col参数

django禁止直接分配到多对多集合的前端.使用user.set()

如何从数据库上传数据到html?

NumPy中条件嵌套for循环的向量化

所有列的滚动标准差,忽略NaN

cv2.matchTemplate函数匹配失败

使用Python从URL下载Excel文件

Django—cte给出:QuerySet对象没有属性with_cte''''

如何在Python 3.9.6和MacOS Sonoma 14.3.1下安装Pyregion