簡體   English   中英

pandas - 如果存在部分字符串匹配,則將值放入新列

[英]pandas - If partial string match exists, put value in new column

我在 pandas 中有一個棘手的問題要解決。 我之前曾將此線程稱為解決方案,但它不是我想要的。

以具有兩列的 dataframe 為例:

df = pd.DataFrame([['Mexico', 'Chile'], ['Nicaragua', 'Nica'], ['Colombia', 'Mex']], columns = ["col1", "col2"])

我首先要檢查第 2 列中的每一行以查看該值是否存在於第 1 列中。這是檢查完整和部分字符串。

df['compare'] = df['col2'].apply(lambda x: 'Yes' if df['col1'].str.contains(x).any() else 'No')

我可以檢查我是否有部分或完整字符串的匹配項,這很好,但不是我需要的。 這是 dataframe 現在的樣子:

在此處輸入圖像描述

我真正想要的是第 1 列中的值與第 2 列中的值匹配。 我一直無法弄清楚如何將它們關聯起來

我想要的結果如下所示:

在此處輸入圖像描述

這是一種“無熊貓”的方法。 可能效率不高,但它完成了工作:

def compare_cols(match_col, partial_col):
    series = []
    for partial_str in partial_col:
        for match_str in match_col:
            if partial_str in match_str:
                series.append(match_str)
                break  # matches to the first value found in match_col
        else:  # for loop did not break = no match found
                series.append(None)
    return series

df = pd.DataFrame([['Mexico', 'Chile'], ['Nicaragua', 'Nica'], ['Colombia', 'Mex']], columns = ["col1", "col2"])

df['compare'] = compare_cols(match_col=df.col1, partial_col=df.col2)

請注意,如果col2中的字符串與col1中的多個字符串匹配,則使用第一個匹配項。

暫無
暫無

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

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