Python 删除列列表中重复的元素并进行比较

Python 删除列列表中重复的元素并进行比较,python,pandas,list,dataframe,Python,Pandas,List,Dataframe,我有一个dataframe,其中所有列都是值列表(如果便于操作,可以是元组)。索引“Name”不是列表,它们是此数据中的唯一值。大多数列表都有重复的值: 姓名部门业务部门人员编号直线经理姓名直线经理工作电子邮件用户名职务名称角色vs家庭 0 Betty[‘部门’、‘部门’、‘部门’][‘南极洲’、‘南极洲’][10038253、10038253、10038253][nan、nan、nan][nan、nan、nan][nanbetty@jane.com', 'betty@jane.com',

我有一个dataframe,其中所有列都是值列表(如果便于操作,可以是元组)。索引“Name”不是列表,它们是此数据中的唯一值。大多数列表都有重复的值:

姓名部门业务部门人员编号直线经理姓名直线经理工作电子邮件用户名职务名称角色vs家庭
0 Betty[‘部门’、‘部门’、‘部门’][‘南极洲’、‘南极洲’][10038253、10038253、10038253][nan、nan、nan][nan、nan、nan][nanbetty@jane.com', 'betty@jane.com', 'betty@ja...[nan,nan,nan][‘不匹配’、‘不匹配’、‘不匹配’]
1鲍勃['Other Department','Other Department']['Poland','Poland'][10036224,10036224]['Jane','Jane']['jane@jane.com', 'jane@jane.com'']	['bob@jane.com', 'bob@jane.com'][nan,nan][“不匹配”,“匹配”]
最终的数据帧看起来像这样
姓名部门业务部门人员编号直线经理姓名直线经理工作电子邮件用户名职务名称角色vs家庭
0贝蒂部门南极洲10038253南南betty@jane.com南不匹配

1 Bob其他部门波兰10036224 Janejane@jane.com bob@jane.comNaN[“不匹配”,“匹配”]
通过将列表转换为集合来删除所有列中的重复项的解决方案-所有值都不缺少值:

def f(x):
     L = list(set(y for y in x if pd.notna(y)))
     #if empty list return NaN
     if len(L) == 0:
         return np.nan
     #if one element list return scalar
     elif len(L) == 1:
         return L[0]
     #else return full list
     else:
         return L

df.iloc[:, 1:] = df.iloc[:, 1:].applymap(f)
print (df)
    Name       Department BusinessUnit PersonNumber LineManagerName  \
0  Betty       Department   Antarctica     10038253             NaN   
1    Bob  OtherDepartment       Poland     10036224            Jane   

  LineManagerWorkEmail        Username JobName         RolevsFamily  
0                  NaN  betty@jane.com     NaN           Donotmatch  
1        jane@jane.com    bob@jane.com     NaN  [Donotmatch, Match]  

欢迎来到StackOverflow。请花点时间阅读这篇文章,以及如何提供答案并相应地修改您的问题。这些关于的提示可能也很有用。@jezrael刚刚编辑过,这样更好吗?抱歉,谢谢!非常好。可以创建预期的输出数据框吗?或者这是示例数据中的最后一列?@jezrael像这样吗?非常感谢,现在我知道怎么做了:)你好,耶兹雷尔,差不多!我相信的第一件事是检查列表中是否有任何重复项。它不应该返回完整列表,它应该返回完整列表,没有重复项。@PauloCortez-我要求的是预期输出,所以不匹配?对不起,粘贴时是我的错误g的数据,但它的工作非常好,非常感谢你!!!!