从数据帧python中的行和列(单元格)中删除重复项

时间:2018-01-04 04:29:24

标签: python pandas dataframe

我有两列在数据框中每个单元格有很多重复项目。类似的东西:

Index   x    y  
  1     1    ec, us, us, gbr, lst
  2     5    ec, us, us, us, us, ec, ec, ec, ec
  3     8    ec, us, us, gbr, lst, lst, lst, lst, gbr
  4     5    ec, ec, ec, us, us, ir, us, ec, ir, ec, ec
  5     7    chn, chn, chn, ec, ec, us, us, gbr, lst

我需要消除所有重复的项目,得到如下结果的数据框:

Index   x    y  
  1     1    ec, us, gbr, lst
  2     5    ec, us
  3     8    ec, us, gbr,lst
  4     5    ec, us, ir
  5     7    chn, ec, us, gbr, lst

谢谢!

4 个答案:

答案 0 :(得分:8)

$data_from_url = json_decode($_GET['data']);并申请Splitset

join

根据评论更新:

df['y'].str.split(', ').apply(set).str.join(', ')

0         us, ec, gbr, lst
1                   us, ec
2         us, ec, gbr, lst
3               us, ec, ir
4    us, lst, ec, gbr, chn
Name: y, dtype: object

答案 1 :(得分:0)

如果您不关心商品订单,并假设列y中所有内容的数据类型都是字符串,则可以使用以下代码段:

df['y'] = df['y'].apply(lambda s: ', '.join(set(s.split(', '))))

set()转换可以删除重复项。我认为在python的更高版本中它可能会保留顺序(可能是3.4+?),但这是一个实现细节而不是语言规范。

答案 2 :(得分:0)

试试这个:

d['y'] = d['y'].apply(lambda x: ', '.join(sorted(set(x.split(', ')))))

答案 3 :(得分:0)

在数据框架上使用apply方法。

# change this function according to your needs
def dedup(row):
    return list(set(row.y))

df['deduped'] = df.apply(dedup, axis=1)