根据字符串匹配合并两个数据集
merge two datasets based on a string match
我有两个数据集;
DF1 包含一个包含短词的列。
DF2 有一列包含一系列单词,在某些情况下它们以 DF1 中的短单词开头
我想在 DF2 中创建一个新列,每次 DF1 单词出现在 DF2 单词的开头,然后将该 DF1 单词放入新创建的列中的那个位置。
想法是一旦完成,我就可以使用匹配的词合并两个数据集。
我该怎么做?
DF1
ref
ABC
DEF
GHI
DF2
word
ABC123
DEF456
GHI789
DF2 - 期望的输出
word
new column
ABC123
ABC
DEF456
DEF
GHI789
GHI
您可以从 ref
列创建模式列表,然后尝试从 word
列提取它:
import re
pattern = fr"({'|'.join(re.escape(x) for x in df1['ref'])})"
df2['new column'] = df2['word'].str.extract(pattern)
print(df2)
# Output
word new column
0 ABC123 ABC
1 DEF456 DEF
2 GHI789 GHI
如果太简单,就得用fuzzy
逻辑。你可以检查这个 &
我有两个数据集;
DF1 包含一个包含短词的列。
DF2 有一列包含一系列单词,在某些情况下它们以 DF1 中的短单词开头
我想在 DF2 中创建一个新列,每次 DF1 单词出现在 DF2 单词的开头,然后将该 DF1 单词放入新创建的列中的那个位置。
想法是一旦完成,我就可以使用匹配的词合并两个数据集。
我该怎么做?
DF1
ref |
---|
ABC |
DEF |
GHI |
DF2
word |
---|
ABC123 |
DEF456 |
GHI789 |
DF2 - 期望的输出
word | new column |
---|---|
ABC123 | ABC |
DEF456 | DEF |
GHI789 | GHI |
您可以从 ref
列创建模式列表,然后尝试从 word
列提取它:
import re
pattern = fr"({'|'.join(re.escape(x) for x in df1['ref'])})"
df2['new column'] = df2['word'].str.extract(pattern)
print(df2)
# Output
word new column
0 ABC123 ABC
1 DEF456 DEF
2 GHI789 GHI
如果太简单,就得用fuzzy
逻辑。你可以检查这个