Pandas数据帧基于“InStr”>0合并两个数据帧

2024-09-29 23:25:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Python Pandas中有两个数据帧。在

存储在单元格中的数据如下:

DF1
- DatabaseId    Integer
- DatabaseName  String

DF2
- CreateString  String

我想将列DataBaseID应用于DF2中的任何记录,其中DF1.DatabaseName存在于createstring的上下文中。在

^{pr2}$

第一条记录将失败,并且不会包含在结果集中。 第二个记录将成功,并将出现在结果集中。在

我研究了各种选项,包括.isin,和.contains,但这些都不起作用。这似乎是一个带有“if match found success”条件的“受控”笛卡尔连接。但我一直没能找到一种方法来做到这一点,而且效率很高。在

需要评估的总列表大小在100K到500K之间。在

更新 添加了更多示例数据:

>>> DF1.head(10)
DatabaseID     DatabaseName
0              DB1
1              DB2
2              DB3
3              DB4
...

>>> DF2.head(10)
CreateString
None
None
None
CREATE VIEW DB1.Table1 AS LOC…
None
REPLACE VIEW DB3.Table3...
CREATE VIEW DB3.Table10 AS SELE...
CREATE VIEW DB55.Table999 AS SELEC...
...

Desired Result
DatabaseID      DatabaseName        CreateText
0               DB1                 CREATE VIEW DB1.Table1 AS LOC…
2               DB3                 REPLACE VIEW DB3.Table3...
2               DB3                 CREATE VIEW DB3.Table10 AS SELE...
...
etc...
...

Tags: 数据noneviewstringascreate记录head
1条回答
网友
1楼 · 发布于 2024-09-29 23:25:49

更新:如何解析表名:

In [100]: df2['TableName'] = df2.CreateString.str.extract('\s+(\w+\.\w+)\s+', expand=True)

In [101]: df2
Out[101]:
                            CreateString DatabaseName      TableName
0                                   None          NaN            NaN
1                                   None          NaN            NaN
2                                   None          NaN            NaN
3         CREATE VIEW DB1.Table1 AS LOC…          DB1     DB1.Table1
4                                   None          NaN            NaN
5            REPLACE VIEW DB3.Table3 ...          DB3     DB3.Table3
6     CREATE VIEW DB3.Table10 AS SELE...          DB3    DB3.Table10
7  CREATE VIEW DB55.Table999 AS SELEC...         DB55  DB55.Table999

原始答案:

你可以这样做:

^{pr2}$

相关问题 更多 >

    热门问题