簡體   English   中英

Pandas:將串聯的字符串與另一個系列的字符串匹配

[英]Pandas: matching a string in series with string from another series

我有一個看起來像這樣的DataFrame:

Full                          Partial
ABCDEFGHIJKLMNOPQRSTUVWXYZ    FGHIJKL
ANLHDFKNADHFBAKHFGBAKJFB      FKNADH
JABFKADFNADKHFBADHBFJDHFBADF  ABFKA

我想要做的是將Full中的所有內容與小寫的Partial不匹配,產生以下內容:

Coverage
abcdef_GHIJKL_mnopqrstuvwxyz
anlhd_FKNADH_fbakhfgbakjfb
j_ABFKA_dfnadkhfbadhbfjdhfbadf

我該怎么做? 我環顧四周,似乎series.str.extract()可能是一個解決方案,但我不確定,當我嘗試這樣做時:

df['Full'].str.extract(data['Partial'])

......它只說系列不能清洗。 我假設extract只需要一個參數,而不是一個系列? 有沒有辦法繞過這個? extract甚至是正確的方法來實現我正在尋找的東西,還是有另一種方式? 我想我也許可以找到提取字符串索引並執行以下偽代碼的方法:

df['Coverage'] = data['Full'][:start].lower() + '_' + data['Partial'] + \
     '_' + data['Full'][End:].lower()

...其中StartEnddata['Partial']開始和結束的索引。 思考?

也許不是最優雅,但這里有一個解決方案:

對於df:

                           Full  Partial
0    ABCDEFGHIJKLMNOPQRSTUVWXYZ  FGHIJKL
1      ANLHDFKNADHFBAKHFGBAKJFB   FKNADH
2  JABFKADFNADKHFBADHBFJDHFBADF    ABFKA

這個:

df.apply(lambda r: r.Full.lower().replace(r.Partial.lower(), '_' + r.Partial + '_'), axis=1)

返回:

0      abcde_FGHIJKL_mnopqrstuvwxyz
1        anlhd_FKNADH_fbakhfgbakjfb
2    j_ABFKA_dfnadkhfbadhbfjdhfbadf

對於每一行,將完整字符串轉換為小寫,並將“部分字符串”替換為原始部分字符串,並在兩側添加兩個下划線。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM