【问题标题】:Searching substring of a dataframe if it exists in another dataframe column如果数据框存在于另一个数据框列中,则搜索它的子字符串
【发布时间】:2021-01-22 05:05:57
【问题描述】:

我需要一些帮助来搜索 dataframe1 中化学列中的字符串或子字符串并检查它是否存在于 dataframe2 中,然后在 dataframe1 中创建一个新列以从 dataframe2 返回相应的化学名称列。有人可以帮忙吗?

谢谢

【问题讨论】:

    标签: python pandas string dataframe string-comparison


    【解决方案1】:

    我不能 100% 确定您的问题是否清楚,但是我已经尝试过您所说的您要尝试使用的示例。这里我们搜索 df1 中的每个元素,然后在 df1 的新列中返回 df2 中每个匹配项的列表。如果这是您所期望的,请告诉我:

    df1 = pd.DataFrame({'CHEMICALS': ['AAA', 'BBB', 'ccc'],
                       'label': [0.0, 1.0, 0.0]
                       })
    df2 = pd.DataFrame({'CHEMICALS': ['DDD', 'BBB_2', 'ccc_2', 'ccc_3'],
                       })
    
    for ind1 in df1.index:
        df1.loc[ind1, 'df2_match'] = ', '.join(list(df2[df2['CHEMICALS'].str.contains(df1['CHEMICALS'][ind1])]['CHEMICALS']))
    

    稍微分解一下:

    x1 = df2['CHEMICALS'].str.contains(df1['CHEMICALS'][ind1])
    

    如果 df2 中的项目包含 df1 中位置 ind1 的字符串,则返回 TRUE/FALSE 系列。

    x2 = df2[x1]['CHEMICALS']
    

    这会在 TRUE/FALSE 系列指定的位置返回 df2 中每个 CHEMICAL 的名称。

    x3 = ', '.join(list(x2))
    

    然后,这会将这些名称转换为列表,然后将它们连接在一起,并在中间使用“,”。然后将其卡在 df1 的新列中的正确索引处,并对 df1 中的每种化学物质重复。

    输出如下:

    df1
        CHEMICALS   label   df2_match
    0   AAA         0.0 
    1   BBB         1.0     BBB_2
    2   ccc         0.0     ccc_2, ccc_3
    

    【讨论】:

    • 谢谢乔尔!!这是我所期待的。非常感谢!
    猜你喜欢
    • 2022-10-24
    • 1970-01-01
    • 2021-01-28
    • 2017-08-18
    • 2021-07-28
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 2017-09-09
    相关资源
    最近更新 更多