我使用:
df[df['A'].astype(str).str.contains("^XYZ|^$", regex=True)]
选择 A 列中的值以模式 ('XYZ') 开头或为空字符串的行。我需要使用另一列(例如“B”列)的值而不是 XYZ。如何在正则表达式中包含此列的名称?甚至有可能吗?
答案 0 :(得分:1)
一个可能的解决方案是将 re.search
与 DataFrame.apply()
一起使用:
import pandas as pd
import re
df = pd.DataFrame(
{'A':['XYZ won the match.', '', 'ZYX lost.'],
'B':['XYZ', 'WORD', 'BAC']
})
df[df.apply(lambda row: bool(re.search(fr"^{re.escape(row['B'])}|^$", row['A'])), axis=1)]
## If the values in Column B are valid regexps:
# df[df.apply(lambda row: bool(re.search(fr"^{row['B']}|^$", row['A'])), axis=1)]
输出:
A B
0 XYZ won the match. XYZ
1 WORD
注意 fr"^{re.escape(row['B'])}|^$
部分从 row['B']
值动态构建模式,并且字符串中的所有特殊字符都使用 re.escape
转义以避免正则表达式匹配问题。如果 B 列中的值是有效的正则表达式,则不需要 re.escape
。