【问题标题】:remove duplicate word from pandas column从熊猫列中删除重复的单词
【发布时间】:2019-11-13 04:32:23
【问题描述】:

我有如下信息的数据框存储在一列中

>>> 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

现在我想在类别列中保留唯一词 例如 : 在第一行出现“错误”一词我想从所有其余行中删除它并仅在第一行保留“错误”一词 在第二行中,“数据”一词可用,然后我想将其从所有其余行中删除,并仅在第二行中保留“数据”一词

我发现如果行中有重复项,我们可以使用 below 删除,但我需要从列中删除重复的单词,有人可以在这里帮助我。

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

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您似乎想要类似的东西,

    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
    

    【讨论】:

    • 这是完美的我一直在寻找这个结果,非常感谢
    【解决方案2】:

    在您的情况下,您首先需要split,然后通过drop_duplicates 删除重复项

    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
    

    【讨论】:

      【解决方案3】:

      你什么不能向量化,所以让我们忘记 pandas 并使用 Python set

      total = set()
      result = []
      for line in AFResults['FinalCategory']:
          line = set(line.split()).difference(total)
          total = total.union(line)
          result.append(' '.join(line))
      

      你会得到那个列表:['wrong issue master delivery account', 'batch data', 'order', '', '']

      您可以使用它来填充数据框列:

      AFResults['FinalCategoryN'] = result
      

      【讨论】:

      • 它起作用了,我只是在您的代码中添加了“line = set(line.split()).difference(total)”,以便在捕获重复的字母之前捕获单词
      【解决方案4】:

      applysortedsetstr.joinlist.index 一起使用:

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

      【讨论】:

        猜你喜欢
        • 2018-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-07
        • 1970-01-01
        • 2019-02-14
        • 1970-01-01
        • 2019-11-05
        相关资源
        最近更新 更多