减去数据框中的A列和B列

2024-03-28 14:51:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个数据帧中有两个字符串列,我想从a中减去B中的常用词

A ->  Stack Overlflow is great            


B -> stack great


A-B -> overflow is

我尝试了以下代码。但它只有在B列有一个单词时才起作用。你知道吗

df['A-B'] = [' '.join(set(a.split())-set(b.split())) for a, b in zip(df['A'], df['B'])]

我能做些什么改变吗?这样当B有多个单词时它就可以工作了?你知道吗


Tags: 数据字符串代码dfisstack单词split
3条回答

例如:

>>> df = pd.DataFrame({'A': ['Stack Overlflow is great'], 'B': ['stack great']})

您可以使用apply

>>> df['A-B'] = df.apply(lambda x: ' '.join([i for i in x[0].split() if i.lower() not in x[1].split()]), axis=1)
>>> df
                          A            B           A-B
0  Stack Overlflow is great  stack great  Overlflow is
>>> 

您可以使用^{}

df['A-B']=df.apply(lambda x: ' '.join(np.setdiff1d(x['A'].lower().split(),
                                        x['B'].lower().split())),axis=1)
print(df)

                          A            B           A-B
0  Stack Overlflow is great  stack great  is overlflow

您的解决方案就快到了,只需在压缩它们时添加^{}

df['A-B']=[' '.join(set(a.split())-set(b.split())) 
        for a, b in zip(df['A'].str.lower(), df['B'].str.lower())]

如果序列中有重复的字符串,请使用^{},这有助于删除重复的字符串set(),但也要保持顺序:

df = pd.DataFrame({'A': ['Stack Overlflow is great is great'], 'B': ['stack great']})
                                  A            B
0  Stack Overlflow is great is great  stack great

from collections import OrderedDict
df['A-B']=[' '.join([ele for ele in OrderedDict.fromkeys(a) if ele not in b ])
 for a,b in zip(df.A.str.lower().str.split(),df.B.str.lower().str.split())]
print(df)

                                   A            B           A-B
0  Stack Overlflow is great is great  stack great  overlflow is

试试这一行:

' '.join(list(set(list(df.A.str.lower().str.split(' '))[0])-set(list(df.B.str.lower().str.split(' '))[0])))

只需将这两个列的值都转换成小写并按空格拆分,然后将其放入一个列表中,然后获取一组这些列表并按空格将它们连接起来。你知道吗

相关问题 更多 >