【问题标题】:remove duplicate pairs from the list in column in pandas从熊猫列中的列表中删除重复的对
【发布时间】:2020-06-23 10:02:02
【问题描述】:

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

例如输入是:

   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)))

关于如何使它工作的任何想法

【问题讨论】:

  • colb 中的内容是一个字符串列表还是一个字符串?如果它是一个字符串列表,是否可以安全地假设 ; 也是一个字符串并且逗号是唯一的分隔符?

标签: python pandas duplicates


【解决方案1】:

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

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]  

【讨论】:

  • 如果我想在每两对之间保留 (;) 分隔符,那么预期的结果应该类似于 [sitea,siteb;sitec,sited]
  • @Fighter 所以你需要像[sitea, siteb, sitec, sited] 这样的列表吗?那么不可能分隔符;。或者需要像sitea,siteb;sitec,sited 这样的字符串?
  • 如果分隔符不能添加,除非它们是字符串,我会接受。我提出了一个答案,但我认为这不是解决这个问题的最佳方法
【解决方案2】:

最终我通过将列表转换为系列来做到这一点,删除重复项并再次加入系列,如下所示:

        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)))))

【讨论】:

    猜你喜欢
    • 2019-11-13
    • 2019-11-05
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 2018-08-03
    • 2015-05-19
    • 1970-01-01
    相关资源
    最近更新 更多