搜索数据框的子字符串(如果它存在于另一个数据框列中)
Searching substring of a dataframe if it exists in another dataframe column
我需要一些帮助来搜索 dataframe1 的 chemicals 列中的字符串或子字符串并检查它是否存在于 dataframe2 中,然后在 dataframe1 中创建一个新列到 return 来自的相应化学名称列数据框2。有人可以帮忙吗?
谢谢
我不是 100% 确定您的问题是否清楚,但是我已经尝试用一个示例来尝试您所说的内容。在这里,我们搜索 df1 中的每个元素,然后 return 在 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 处的字符串,则此 return 是一个 TRUE/FALSE 系列。
x2 = df2[x1]['CHEMICALS']
这 return 是 df2 中 TRUE/FALSE 系列指定位置的每种化学物质的名称。
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
我需要一些帮助来搜索 dataframe1 的 chemicals 列中的字符串或子字符串并检查它是否存在于 dataframe2 中,然后在 dataframe1 中创建一个新列到 return 来自的相应化学名称列数据框2。有人可以帮忙吗?
谢谢
我不是 100% 确定您的问题是否清楚,但是我已经尝试用一个示例来尝试您所说的内容。在这里,我们搜索 df1 中的每个元素,然后 return 在 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 处的字符串,则此 return 是一个 TRUE/FALSE 系列。
x2 = df2[x1]['CHEMICALS']
这 return 是 df2 中 TRUE/FALSE 系列指定位置的每种化学物质的名称。
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