python 我想对A列应用合并函数

yqkkidmi  于 2023-01-24  发布在  Python
关注(0)|答案(1)|浏览(103)

我如何应用合并函数或任何其他方法对列A。例如,在外行术语我想转换这个字符串"(A|B|(C、D)|(甲、乙|C级|(d)|(乙)|C级|D)"变成一个"(D A|D和B|(c)|(甲、乙)|阿中|(阿拉伯文、中文和法文)|(乙)|C级|(d)"
此(B|C级|D)将保持不变,因为它没有逗号值合并在它。基本上,我想合并的值是在逗号其余的其他价值观。
我有下面的数据框。

import pandas as pd

data = {'A': [ '(A|B|C,D)|(A,B|C|D)|(B|C|D)'],
        'B(Expected)': [ '(D A|D B|D C)|(A B|A C|A D)|(B|C|D)']
        }

df = pd.DataFrame(data)

print (df)

我的预期结果见B列(预期)
下面的方法我尝试:-(1)

df['B(Expected)'] = df['A'].apply(lambda x: x.replace("|", " ").replace(",", "|") if "|" in x and "," in x else x)

(二)

# Split the string by the pipe character
df['string'] = df['string'].str.split('|')
df['string'] = df['string'].apply(lambda x: '|'.join([' '.join(i.split(' ')) for i in x]))
wlp8pajw

wlp8pajw1#

可以使用正则表达式提取括号中的值,然后使用带有itertools.product的自定义函数重新组织这些值:

from itertools import product

def split(s):
    return '|'.join([' '.join(x) for x in product(*[x.split('|') for x in s.split(',')])])

df['B'] = df['A'].str.replace(r'([^()]+)', lambda m: split(m.group()), regex=True)

print(df)
  • 请注意,这需要非嵌套括号。*

输出:

A                                    B
0  (A|B|C,D)|(A,B|C|D)|(B|C|D)  (A D|B D|C D)|(A B|A C|A D)|(B|C|D)

相关问题