【问题标题】:Filter dataframe by removing duplicates from column containing list pandas通过从包含熊猫列表的列中删除重复项来过滤数据框
【发布时间】:2020-12-07 05:28:36
【问题描述】:

数据框列包含列表中的字符串值。 Dataframe 需要转换为在“Final”列中具有唯一列表的行

我有如下数据框,

    string1           string2           Final
1   [abc,ncx]       [qwe, rty]        [apple, mango]
2   [uio,pas,dfg]   [zxc,vbg,dfv]     [banana,grapes, apple]
3   [ncx,abc]       [rty,qwe]         [mango,apple]
4   [uio,pas,dfg]   [zxc,vbg,dfv]     [banana,grapes, apple]
5   [uio,dfg]        [zxc,dfv]        [banana, apple]
6   [ncx,abc]       [rty,qwe]         [mango,apple]

df['final'] 列必须删除重复列表并转换数据框以在 'final' 列中包含唯一列表。

所需的输出数据帧:

     string1           string2           Final
1   [abc,ncx]       [qwe, rty]        [apple, mango]
2   [uio,pas,dfg]   [zxc,vbg,dfv]     [banana,grapes, apple]
3   [ncx,abc]       [rty,qwe]         [mango,apple]
4   [uio,dfg]        [zxc,dfv]        [banana, apple]

【问题讨论】:

    标签: python pandas string dataframe unique


    【解决方案1】:

    Series.duplicated 创建的~ 反转掩码,但由于lists 不可散列,首先将它们转换为元组并在boolean indexing 中过滤:

    df = df[~df['Final'].apply(tuple).duplicated()]
    print (df)
             string1        string2                    Final
    1      [abc,ncx]      [qwe,rty]           [apple, mango]
    2  [uio,pas,dfg]  [zxc,vbg,dfv]  [banana, grapes, apple]
    3      [ncx,abc]      [rty,qwe]           [mango, apple]
    5      [uio,dfg]      [zxc,dfv]          [banana, apple]
    

    如果apple, mango 应该与mango, apple 重复(顺序不重要)将tuple 更改为frozenset

    df = df[~df['Final'].apply(frozenset).duplicated()]
    print (df)
             string1        string2                    Final
    1      [abc,ncx]      [qwe,rty]           [apple, mango]
    2  [uio,pas,dfg]  [zxc,vbg,dfv]  [banana, grapes, apple]
    5      [uio,dfg]      [zxc,dfv]          [banana, apple]
    

    【讨论】:

    • 我想列表顺序是否重要很重要。也许apply(lambda x: tuple(sorted(x))) 之类的?
    • @anon01 - 我认为应该在这里使用frozenset,答案已编辑。
    • 啊,有道理!
    • @anon01@jezrael 顺序很重要。第一个带有元组的代码工作正常。谢谢
    猜你喜欢
    • 2022-01-04
    • 1970-01-01
    • 2019-05-21
    • 2019-06-19
    • 2022-10-04
    • 2019-03-07
    • 1970-01-01
    • 2017-12-15
    • 2021-12-01
    相关资源
    最近更新 更多