我有两列在数据框中每个单元格有很多重复项目。类似的东西:
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
谢谢!
答案 0 :(得分:8)
$data_from_url = json_decode($_GET['data']);
并申请Split
和set
即
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)