簡體   English   中英

使用 python/pandas 從另一個 excel 列中的一個 excel 列中查找部分字符串匹配

[英]Find a partial string match from one excel column in another excel column using python/pandas

我有兩個 excel 電子表格加載到 2 個不同的數據幀中。 電子表格 1 中的一列(系統)有一個系統代碼,我需要與電子表格 2 中的另一列(描述)相匹配。第二列有一個描述,其中可能有也可能沒有系統以及其他字符串。 如果找到匹配項,我想在 append 電子表格 2 中添加一個包含系統代碼的新列。

df1 = pd.DataFrame(
    {
        "System": ["HFW", "SYS", "ABC"],
        "Description": ["HFW Description", "Sys Description", "ABC Description"],
    }
)

df2 = pd.DataFrame(
    {
        "Description": [
            "Amount spent for HFW",
            "Spending amt on XYZ",
            "INV20563BG",
            "ABC Cost",
            "ABC Cost 2",
        ],
        "Amount": ["150", "175", "160", "180", "100"],
    }
)

所以基本上需要將 DF1 中的“系統”列匹配到 DF2 中的“描述”。 DF1 和 DF2 可以有更多的列和不同的行數。

嘗試了這些選項:

df1["MatchingSystem"] = df1.System.apply(
    lambda x: 1 if df2["Description"].str.contains(x) else 0
)

還嘗試了其他一些東西。 任何幫助表示贊賞

您可以比較 2 個字符串列表並編寫第一個匹配項:

sys_values = df1.System.values

df2["MatchingSystem"] = df2.Description.apply(
    lambda x: next((sys for sys in sys_values if sys in x.split()), None)
)

生成的 dataframe df2是:

            Description Amount MatchingSystem
0  Amount spent for HFW    150            HFW
1   Spending amt on XYZ    175           None
2            INV20563BG    160           None
3              ABC Cost    180            ABC
4            ABC Cost 2    100            ABC

我在 df2 dataframe 中創建了新列,因為看起來一個df1.System可以在多個df2.Description中。

它有點臟,但我認為它確實有效。 如果您有任何問題或疑問,請告訴我。

暫無
暫無

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

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