【问题标题】:Pandas join by greater than or less than熊猫加入大于或小于
【发布时间】:2022-08-22 04:22:41
【问题描述】:

我有两张桌子 A) 包含“条目号”和“金额” B) 包含“From Entry number”和“To Entry Number”和“Created Date”

然后我想加入两者,但我没有特定的连接键,因为表 A 具有特定的“条目号” - 例如“1000”,但表 B 有间隔,例如“从条目号\" \"900\" 和\"到条目号\" \"1100\"。在 SQL 中,我可以将它们加入为:

select * from table A 
left join table B
on a.[Entry number] >= b.[From Entry number] and a.[Entry number] <= b.[To Entry number]

但是我怎样才能实现 Pandas 呢?

  • 查看here 以获取可能的解决方案
  • 我看过那个解决方案,但是你有一些通用的连接键,我没有这种情况。
  • 请提供具有预期输出的示例数据框

标签: python pandas


【解决方案1】:

免责声明:此解决方案会占用大量内存。

我正在使用以下两个数据框:

import pandas as pd
dfa = pd.DataFrame({"Entry Number": [1000, 50],
                    "Amount":[4,2]})
dfb = pd.DataFrame({"From Entry Number":[900, 60],
                    "To Entry Number":[1100, 100],
                    "Create Date":["2021-01-01", "2020-01-01"]})

外交部:

Entry Number Amount
1000 4
50 2

dfb:

From Entry Number To Entry Number Create Date
900 1100 2021-01-01
60 100 2020-01-01

首先创建一个笛卡尔(交叉)连接数据框:

df = dfa.merge(dfb, how = 'cross')

这将创建以下连接数据框:

Entry Number Amount From Entry Number To Entry Number Create Date
1000 4 900 1100 2021-01-01
1000 4 60 100 2020-01-01
50 2 900 1100 2021-01-01
50 2 60 100 2020-01-01

现在您可以根据您的条件过滤数据框:

df[
    (df["Entry Number"] >= df["From Entry Number"]) &
    (df["Entry Number"] <= df["To Entry Number"])
  ]

最终结果:

Entry Number Amount From Entry Number To Entry Number Create Date
1000 4 900 1100 2021-01-01

【讨论】:

    【解决方案2】:
     import pandas as pd
     import sqldf 
        
        dfa = pd.DataFrame({"EntryNumber": [1000, 50],
                            "Amount":[4,2]})
        dfb = pd.DataFrame({"FromEntryNumber":[900, 60],
                            "ToEntryNumber":[1100, 100],
                            "CreateDate":["2021-01-01", "2020-01-01"]})
        
        sqldf.run(
            """
                select * 
                from dfa  
                join dfb on dfa.EntryNumber >= dfb.FromEntryNumber and 
                dfa.EntryNumber<=dfb.ToEntryNumber
            """
        )
    

    使用 sqldf 将允许您在 python 中使用 SQL 代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-13
      • 1970-01-01
      • 1970-01-01
      • 2011-01-25
      • 2017-06-27
      • 1970-01-01
      • 2013-09-02
      相关资源
      最近更新 更多