Pandas dataframe如何通过比较列A和B的正则表达式输出来删除行

nbysray5  于 2023-08-01  发布在  其他
关注(0)|答案(1)|浏览(85)

我有一个包含两列的数据框架,两列都包含字符串
对于正则表达式结果中的命名捕获组“termduration”,我想删除列B(Resources)的正则表达式匹配与列A(ServicePlan)不匹配的行。
数据来源:

ServicePlan                         Resources
0  Plan A (CSP COM BAS 1YR ANN)  Resource A (CSP COM BAS 1YR ANN)
1  Plan A (CSP COM BAS 1YR ANN)  Resource B (CSP COM BAS 1YR ANN)
2  Plan A (CSP COM BAS 1YR ANN)  Resource C (CSP COM BAS 6YR ANN)

字符串
我尝试了以下操作,但我得到了一个类型错误。我正在努力比较两个字符串之间的正则表达式名为捕获组的结果。

import pandas as pd
import re
e_name = r'(?P<name>.*)\((?P<product>[A-Z]{3})\s(?P<type>[A-Z]{3})\s?(?P<baseattach>BAS|ADD|ATT|SWS)?\s?(?P<telco_overusage>OVG)?\s?(?P<termduration>[A-Z0-9]{3})?\s?(?P<billing>[A-Z0-9]{3})\)$'
name_re = re.compile(e_name)

data = {'ServicePlan': ["Plan A (CSP COM BAS 1YR ANN)","Plan A (CSP COM BAS 1YR ANN)","Plan A (CSP COM BAS 1YR ANN)"],
        'Resources': ["Resource A (CSP COM BAS 1YR ANN)","Resource B (CSP COM BAS 1YR ANN)","Resource C (CSP COM BAS 6YR ANN)"]}

df = pd.DataFrame(data)
print(df)
df[~(name_re.findall(df['ServicePlan'].astype(str))[0]['termduration']).ne(name_re.findall(df['Resource'].astype(str))[0]['termduration'])]
print(df)

kiz8lqtg

kiz8lqtg1#

使用pandas.Series.str.extract

df = df[df['ServicePlan'].str.extract(name_re, expand=False)['termduration']
        .eq(df['Resources'].str.extract(name_re, expand=False)['termduration'])]
print(df)

个字符

相关问题