我是Python新手,遇到了一个问题。
df1 = pd.DataFrame({'col1': ['apple', 'banana', 'cherry', 'apple', 'cherry']})
df2 = pd.DataFrame({'col1': ['app Banana', 'Cherry', 'banana', 'apple', 'bnapple', 'apple ch']})
假设我有 df2 和 df1,它们具有 col1 值。 df1 具有正确的全名,但可能有重复项(由于其他 col 数据不同,我需要将其保留在两个数据框中)。
df2 有错误的名称或不正确的大小写,我想纠正。我希望 df2 列反映 df1 col 所说的内容。 df2 的结果列将是 -
df2 = pd.DataFrame({'col1': ['banana', 'cherry', 'banana', 'apple', 'apple', 'apple']})
蒂亚!
我不知道该怎么做。我尝试了数据帧的合并查询,但这只是给出了 df1 + df2 中的所有内容。
根据
df1
和 extract
制作正则表达式 df2
:
import re
pat = '(%s)' % '|'.join(map(re.escape, df1['col1'].unique()))
# '(apple|banana|cherry)'
df2['out'] = df2['col1'].str.extract(pat, flags=re.I, expand=False)
# variant to have lowercase
df2['out2'] = df2['col1'].str.casefold().str.extract(pat, flags=re.I, expand=False)
输出:
col1 out out2
0 app Banana Banana banana
1 Cherry Cherry cherry
2 banana banana banana
3 apple apple apple
4 bnapple apple apple
5 apple ch apple apple