python - 使用开始日期和结束日期进行左连接

标签 python python-3.x pandas

下面前两个表是 cat1cat2 table 基本上,我希望留下加入cat1cat2 ,其中cat1日期介于 cat2 的开始/结束日期之间 最后一个表是结果,我应该如何实现这个结果?

enter image description here

请查找下面的代码 cat1cat2

import pandas as pd
from datetime import date

cat1=pd.DataFrame({
    "CatID":[1, 2, 3],
    "Date":[date(2019,10,1), date(2019,11,1), date(2019,12,1)]
})

cat2=pd.DataFrame({
    "Interesting":[1, 2, 3],
    "StartDate":[date(2019,10,1), date(2019,11,1), date(2018,10,6)],
    "EndDate":[date(2019,10,30), date(2019,11,30), date(2018,10,6)]
})

最佳答案

最简单的方法..

import pandas as pd
from datetime import date

cat1=pd.DataFrame({"CatID":[1,2,3],
                 "Date":[date(2019,10,1),date(2019,11,1),date(2019,12,1)]})
cat2=pd.DataFrame({"Interesting":[1,2,3],
                 "StartDate":[date(2019,10,1),date(2019,11,1),date(2018,10,6)],
                  "EndDate":[date(2019,10,30),date(2019,11,30),date(2018,10,6)]})

cat3_data = []
for interesting, start, end in cat2.values:
    for d in pd.date_range(start, end, freq='D'):
        cat3_data.append([d.date(), interesting])
cat3 = pd.DataFrame(cat3_data, columns=['Date', 'Interesting'])

result = pd.merge(cat1, cat3, how='left', on='Date')

结果

    CatID   Date    Interesting
0   1   2019-10-01  1.0
1   2   2019-11-01  2.0
2   3   2019-12-01  NaN

关于python - 使用开始日期和结束日期进行左连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58927686/

相关文章:

python - 创建一个 xpath 增加的 for 循环

python - Pandas DataFrame iloc 破坏了数据类型

python - 我如何在 pandas 数据框中找到一行的 iloc?

python - 有没有办法在PyCharm控制台中查看参数信息?

python - “dict”对象没有属性 'append'

python - 将列表中的数据提取到 CSV 文件中的多行 (Python3)

python - Pandas:如何加载包含多个 txt 文件的 zip 文件?

python - 如何使数据框全局化并在函数中使用它?

python - 将 pandas 索引转换为 numpy 数组。 Python

python 使用命名空间处理 xml 字符串