我在Python Pandas中有两个DataFrame。熊猫数据帧 - 基于“InStr”合并两个数据帧> 0
存储在单元中的数据如下:
DF1
- DatabaseId Integer
- DatabaseName String
DF2
- CreateString String
我想列DataBaseID适用于DF2任何记录,其中DF1.DatabaseName创建的字符串的上下文中存在。
Example:
DatabaseName = "UserDB" CreateString = "This create string would fail"
DatabaseName = "UserDB" CreateString = "This create string has UserDB in it"
第一条记录会失败并且不包含在结果集中。 第二条记录会成功,并将在结果集中。
我已经研究了各种选项,包括.isin
和.contains
,但这些都没有奏效。这似乎是一个'受控'的笛卡尔连接,'if match found success'条件。但我一直无法找到一种方法来做到这一点,而且它是有效的。
需要评估的总列表大小在每个100K到500K之间。
UPDATE 增加了更多的示例数据:
>>> 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...
...
你可以显示你的* actual * DataFrames吗? – chrisaycock
为了澄清,您只需要DF2中包含DF1的DatabaseName列中的某个数据库名称的条目?你有没有尝试从DatabaseName列中创建一个正则表达式,然后做类似DF2.loc [:,'CreateString']。str.contains(regex),其中regex是从DF1 DatabaseName列创建的正则表达式? –