从中列的列表中删除重复对

2024-10-02 22:36:53 发布

您现在位置:Python中文网/ 问答频道 /正文

在维护订单时,我想从列中的列表中删除重复对:

例如,输入为:

   cola.   colb
     1.  [sitea,siteb,sitea,siteb;sitec,sited,sitec,sited]

预期输出是每个“;”之前的唯一元素象征

  cola.   colb
     1.  [sitea,siteb;sitec,sited]

我试着根据;符号和为列表创建一个集合,但它不起作用

df['test'] = df.e2etrail.str.split(';').map(lambda x : ','.join(sorted(set(x),key=x.index)))

我还尝试了以下方法

df['test'] = df['e2etrail'].apply(lambda x: list(pd.unique(x)))

你知道怎么做吗


Tags: lambda订单test元素df列表符号str
2条回答

您可以按条带删除[],然后先按,;拆分,然后使用您的解决方案:

print (df.e2etrail.str.strip('[]').str.split('[;,]'))
dtype: object
0    [sitea, siteb, sitea, siteb, sitec, sited, sit...
Name: e2etrail, dtype: object

f = lambda x : ','.join(sorted(set(x),key=x.index))
df['test'] = df.e2etrail.str.strip('[]').str.split('[;,]').map(f)
print (df)
   cola.                                           e2etrail  \
0    1.0  [sitea,siteb,sitea,siteb;sitec,sited,sitec,sited]   

                      test  
0  sitea,siteb,sitec,sited  

如果需要输出列表:

f = lambda x : sorted(set(x),key=x.index)
df['test'] = df.e2etrail.str.strip('[]').str.split('[;,]').map(f)
print (df)
   cola.                                           e2etrail  \
0    1.0  [sitea,siteb,sitea,siteb;sitec,sited,sitec,sited]   

                           test  
0  [sitea, siteb, sitec, sited]  

最终,我将列表转换为系列,删除了重复项并再次加入系列,如下所示:

        df['e2etrails']=df['e2etrails'].str.split(';')
        df['e2etrails']=df['e2etrails'].apply(lambda row :';'.join(pd.Series(row).str.split(',').map(lambda x : ','.join(sorted(set(x),key=x.index)))))

相关问题 更多 >