首页  >  文章  >  后端开发  >  如何根据值范围和标识符有效合并 Pandas Dataframe?

如何根据值范围和标识符有效合并 Pandas Dataframe?

Linda Hamilton
Linda Hamilton原创
2024-10-30 11:54:02185浏览

How to Efficiently Merge Pandas Dataframes Based on Value Range and Identifier?

基于值范围和标识符合并 Pandas 数据帧

在 pandas 中,可以使用基于范围的条件和标识符来实现合并数据帧通过合并和过滤操作的组合。然而,在处理大型数据集时,这种方法可能效率低下。利用 SQL 的另一种方法可以提供更好的性能。

让我们考虑一个示例,其中我们有两个数据帧 A 和 B。数据帧 A 包含日期 (fdate) 和标识符 (cusip),而数据帧 B 包含日期(namedt 和 nameenddt)和相同的标识符 (ncusip)。我们的目标是合并这些数据帧,其中 A 中的 fdate 落在 B 中的 namet 和 nameenddt 定义的日期范围内。

以下 Python 代码演示了传统的 pandas 方法:

<code class="python">df = pd.merge(A, B, how='inner', left_on='cusip', right_on='ncusip')
df = df[(df['fdate']>=df['namedt']) & (df['fdate']<=df['nameenddt'])]</code>

虽然这种方法有效,但它涉及无条件合并数据帧,然后根据日期条件进行过滤,这对于大型数据集来说计算成本可能很高。

另一种方法是使用 SQL 查询:

<code class="python">import pandas as pd
import sqlite3

# Create a temporary database in memory
conn = sqlite3.connect(':memory:')

# Write the dataframes to tables
A.to_sql('table_a', conn, index=False)
B.to_sql('table_b', conn, index=False)

# Construct the SQL query
query = '''
    SELECT *
    FROM table_a
    JOIN table_b ON table_a.cusip = table_b.ncusip
    WHERE table_a.fdate BETWEEN table_b.namedt AND table_b.nameenddt
'''

# Execute the query and create a Pandas dataframe
df = pd.read_sql_query(query, conn)</code>

这种方法有几个优点:

  • 执行速度更快: SQL 针对数据处理进行了优化,使其对于基于范围的过滤更加高效。
  • 避免中间数据:直接提取过滤后的数据,无需创建大型中间数据框。
  • 简单性:查询简洁,易于理解。

总之,利​​用 SQL 根据基于范围的条件和标识符合并数据帧比传统的 Pandas 操作具有性能优势,特别是对于较大的数据集。

以上是如何根据值范围和标识符有效合并 Pandas Dataframe?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn