Python 从列中删除重复的单词

Python 从列中删除重复的单词,python,pandas,Python,Pandas,我有一个dataframe,其中的信息存储在一列中,如下所示 >>> Results.Category[:5] 0 issue delivery wrong master account 1 data wrong master account batch 2 order delivery wrong data account 3 issue delivery wrong master account 4 delivery wrong maste

我有一个dataframe,其中的信息存储在一列中,如下所示

>>> Results.Category[:5]
0    issue delivery wrong master account
1      data wrong master account batch
2    order delivery wrong data account
3    issue delivery wrong master account
4    delivery wrong master account batch
Name: Category, dtype: object
现在我想在分类列中保留唯一的单词 例如: 在第一行中,出现了“错误”一词,我想把它从所有其他行中删除,只在第一行保留“错误”一词 在第二行中,单词“data”可用,然后我想将其从所有其他行中删除,并将单词“data”仅保留在第二行中

我发现,如果行中有重复项,我们可以使用下面的方法删除,但我需要从列中删除重复的单词,请任何人在这里帮助我

AFResults['FinalCategoryN'] = AFResults['FinalCategory'].apply(lambda x: remove_dup(x))

使用
apply
sorted
set
str.join
list.index

AFResults['FinalCategoryN'] = AFResults['FinalCategory'].apply(lambda x: ' '.join(sorted(set(x.split()), key=x.index)))

使用
apply
sorted
set
str.join
list.index

AFResults['FinalCategoryN'] = AFResults['FinalCategory'].apply(lambda x: ' '.join(sorted(set(x.split()), key=x.index)))

在您的情况下,您需要先对其进行
拆分
,然后通过
删除重复项

df.c.str.split(expand=True).stack().drop_duplicates().\
     groupby(level=0).apply(','.join).reindex(df.index)
Out[206]: 
0    issue,delivery,wrong,master,account
1                             data,batch
2                                  order
3                                    NaN
4                                    NaN
dtype: object

在您的情况下,您需要先对其进行
拆分
,然后通过
删除重复项

df.c.str.split(expand=True).stack().drop_duplicates().\
     groupby(level=0).apply(','.join).reindex(df.index)
Out[206]: 
0    issue,delivery,wrong,master,account
1                             data,batch
2                                  order
3                                    NaN
4                                    NaN
dtype: object

看来你想要的是

out = []
seen = set()
for c in df['Category']:
    words = c.split()
    out.append(' '.join([w for w in words if w not in seen]))
    seen.update(words)

df['FinalCategoryN'] = out
df

                              Category                       FinalCategoryN
0  issue delivery wrong master account  issue delivery wrong master account
1      data wrong master account batch                           data batch
2    order delivery wrong data account                                order
3  issue delivery wrong master account                                     
4  delivery wrong master account batch                                     

如果您不关心排序,可以使用集合逻辑:

u = df['Category'].apply(str.split)
v = split.shift().map(lambda x: [] if x != x else x).cumsum().map(set)
(u.map(set) - v).str.join(' ')

0    account delivery issue master wrong
1                             batch data
2                                  order
3                                       
4                                       
Name: Category, dtype: object

看来你想要的是

out = []
seen = set()
for c in df['Category']:
    words = c.split()
    out.append(' '.join([w for w in words if w not in seen]))
    seen.update(words)

df['FinalCategoryN'] = out
df

                              Category                       FinalCategoryN
0  issue delivery wrong master account  issue delivery wrong master account
1      data wrong master account batch                           data batch
2    order delivery wrong data account                                order
3  issue delivery wrong master account                                     
4  delivery wrong master account batch                                     

如果您不关心排序,可以使用集合逻辑:

u = df['Category'].apply(str.split)
v = split.shift().map(lambda x: [] if x != x else x).cumsum().map(set)
(u.map(set) - v).str.join(' ')

0    account delivery issue master wrong
1                             batch data
2                                  order
3                                       
4                                       
Name: Category, dtype: object

你知道什么是不能矢量化的,所以让我们先忘掉熊猫,使用Python
set

total = set()
result = []
for line in AFResults['FinalCategory']:
    line = set(line.split()).difference(total)
    total = total.union(line)
    result.append(' '.join(line))
您将得到以下列表:
[“错误的问题主交付帐户”、“批处理数据”、“订单”、“订单”、“,”]

您可以使用它来填充dataframe列:

AFResults['FinalCategoryN'] = result

你知道什么是不能矢量化的,所以让我们先忘掉熊猫,使用Python
set

total = set()
result = []
for line in AFResults['FinalCategory']:
    line = set(line.split()).difference(total)
    total = total.union(line)
    result.append(' '.join(line))
您将得到以下列表:
[“错误的问题主交付帐户”、“批处理数据”、“订单”、“订单”、“,”]

您可以使用它来填充dataframe列:

AFResults['FinalCategoryN'] = result

它起作用了,我只是在代码中添加了“line=set(line.split()).difference(total)”来捕获word之前它是捕获字母以捕获重复项它起作用了,我只是添加了“line=set(line.split()).difference(total)”在您的代码中捕获单词之前,它捕获了用于捕获重复项的字母这是完美的我正在寻找此结果,非常感谢这是完美的我正在寻找此结果,非常感谢