在SQL中等同于不等式的Python

时间:2019-03-11 20:26:41

标签: python sql pandas tsql

我最近开始在工作中使用python而不是SQL。我无权访问任何服务器,IT也不允许我安装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

OR

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中重新创建上一条语句?

1 个答案:

答案 0 :(得分:0)

好吧,您可以先尝试以下方法:

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

也许这对您有用。