Python 等价于 SQL 中的不等式连接

标签 python sql pandas tsql

<分区>

我最近开始在工作中使用 python 而不是 SQL。我无权访问任何服务器,也不允许我安装 SQL SERVER EXPRESS 的本地实例。数据集太大,无法使用 Excel 或 Access。

我正在使用我对 python 的有限知识作为解决方法。我已经成功地分析了其他数据集,但这个数据集提出了新的挑战。 我有一个非常大的数据集(25 行以上),我想执行与此等效的操作: 在 T-SQL 中:

    SELECT
     A.TransactionDate,
     B.StartDate,
     B.EndDate,
     B.RefValue
    FROM table1 AS A
    LEFT JOIN table2 AS B 
     ON A.TransactionDate BETWEEN B.StartDate AND B.EndDate

ON A.Date1 >= B.StartDate AND A.Date <= B.EndDate

示例数据:

import pandas as pd
df1 = pd.DataFrame(
    {
        'TranDate': ['2018/01/05', '2018/02/07', '2018/03/24']
        ,'Loc': [4000, 5000, 4200]
    }
)

df2 = pd.DataFrame(
    {
        'StartDate': ['2018/01/01', '2018/02/01', '2018/03/01']
        ,'EndDate': ['2018/01/31','2018/02/28', '2018/03/30']
        ,'PP': ['01', '02', '03']
    }
)

预期数据框:

dfR = pd.DataFrame(
    {
        'TranDate': ['2018/01/05', '2018/02/07', '2018/03/24']
        ,'Loc': [4000, 5000, 4200]
        ,'PP': ['01', '02', '03']
    }
)

我尝试使用 pandas.merge() 语句,但是没有不等式的选项。

如何在 python 中重新创建之前的语句?

最佳答案

好吧,你可以先试试这个:

dfR = df1.copy()
dfR.loc[dfR['TranDate'].between(df2['StartDate'], df2['EndDate']), 'PP'] = df2['PP']

也许这对你有用。

关于Python 等价于 SQL 中的不等式连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55109863/

相关文章:

python - 推送到远程仓库

python - 如何比较每个时间段的字符串变化

java - Android Studio - java.lang.IllegalStateException : Could not find button's onClick method

python - 如何将数据框第 4、5、6 列中的值更改为百分比格式?

python - python 中的质数生成器最多 20

python - 如何获得产生特定总和的top-x元素

mysql - 如何将字符添加到字符串中的特定索引

mysql比较2个子字符串列

python - 如何根据给定的标准填写一些字段?

python - 通过添加列创建 pandas 数据框