【问题标题】:How to remove duplicate from a list of a column in a dataframe in python?如何从python中数据框中的列列表中删除重复项?
【发布时间】:2019-05-04 21:30:51
【问题描述】:

我有一个数据框:

id      rev     names
34e     A      su,ra,ve,ra,de,ra
45e     R      ra,su,su,ve,de
55e     G      su,ra,de
41e     M      su,de,mu,er,su

现在我需要删除重复项,输出应该如下:

id      rev     names
34e     A      su,ra,ve,de
45e     R      ra,su,ve,de
55e     G      su,ra,de
41e     M      su,de,mu,er

如何做到这一点?

【问题讨论】:

  • 名字是字符串还是列表?

标签: python pandas list


【解决方案1】:

假设名称是字符串类型:

import pandas as pd

data = [['34e', 'A', 'su,ra,ve,ra,de,ra'],
        ['45e', 'R', 'ra,su,su,ve,de'],
        ['55e', 'G', 'su,ra,de'],
        ['41e', 'M', 'su,de,mu,er,su']]

df = pd.DataFrame(data=data, columns=['id', 'rev', 'names'])

df['names'] = [','.join(set(name.split(','))) for name in df.names]
print(df)

或者如果是列表类型:

import pandas as pd

data = [['34e', 'A', ['su', 'ra', 've', 'ra', 'de', 'ra']],
        ['45e', 'R', ['ra', 'su', 'su', 've', 'de']],
        ['55e', 'G', ['su', 'ra', 'de']],
        ['41e', 'M', ['su', 'de', 'mu', 'er', 'su']]]

df = pd.DataFrame(data=data, columns=['id', 'rev', 'names'])

df['names'] = [list(set(name)) for name in df.names]
print(df)

输出

    id rev             names
0  34e   A  [su, ra, ve, de]
1  45e   R  [su, ra, ve, de]
2  55e   G      [su, ra, de]
3  41e   M  [su, er, mu, de]

【讨论】:

    【解决方案2】:

    如果列首先包含字符串split,则转换为sets 和join:

    df['names'] = df['names'].apply(lambda x: ','.join(set(x.split(','))))
    

    如果列包含转换为set 和list 的列表是必要的:

    df['names'] = df['names'].apply(lambda x: list(set(x)))
    

    如果订单很重要,请使用pandas.unique:

    df['names'] = df['names'].apply(lambda x: ','.join(pd.unique(x.split(','))))
    
    df['names'] = df['names'].apply(lambda x: list(pd.unique(x)))
    

    【讨论】:

    • 也许顺序很重要 pd.unique 对于这类问题看起来足够好:-)
    【解决方案3】:

    使用 split 跟随 sorted + set ,然后 join 它返回字符串

    df.names.str.split(',').map(lambda x : ','.join(sorted(set(x),key=x.index)))
    Out[763]: 
    0    su,ra,ve,de
    1    ra,su,ve,de
    2       su,ra,de
    3    su,de,mu,er
    Name: names, dtype: object
    

    【讨论】:

      猜你喜欢
      • 2012-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-21
      • 2020-08-04
      • 2011-09-29
      相关资源
      最近更新 更多