我在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列創建的正則表達式? –