如何检查多列表的pandas列中的项目是否重复?

问题描述 投票:2回答:2

我有这个pandas df。

                                               Name
0                      [MARCIO, HAMILTON, FERREIRA]
1                    [NILSON, MARTINIANO, FERREIRA]
2                         [WALTER, MALIENI, JUNIOR]
3                  [CARLOS, ALBERTO, ARAUJO, NETTO]

如果一个项目出现在另一个列表中,我想标记它。在这种情况下,输出应该是这样的。

                                               Name       Check
0                      [MARCIO, HAMILTON, FERREIRA]        True
1                    [NILSON, MARTINIANO, FERREIRA]        True
2                         [WALTER, MALIENI, JUNIOR]       False
3                  [CARLOS, ALBERTO, ARAUJO, NETTO]       False

有没有一种pythonic的方法可以做到这一点,或者我需要应用一组... for 句子?(for i in object: for k in list...). 由于我的文件比较大,恐怕会很重。

python pandas list object
2个回答
2
投票

类似于Ben的答案,但使用 duplicated 而不是 groupby().nunique():

s = series.explode().reset_index()
df['Check'] = (s.drop_duplicates()
                .duplicated('Name', keep=False)
                .groupby(s['index']).any()
              )

输出。

                               Name  Check
0      [MARCIO, HAMILTON, FERREIRA]   True
1    [NILSON, MARTINIANO, FERREIRA]   True
2         [WALTER, MALIENI, JUNIOR]  False
3  [CARLOS, ALBERTO, ARAUJO, NETTO]  False

2
投票

我们可以做到 explode 然后做 transformnunqiue 找指数 duplicated 同值

s=df.Name.explode().reset_index()
v=(s.groupby('Name')['index'].transform('nunique')>1).groupby(s['index']).any()
Out[465]: 
index
0     True
1     True
2    False
3    False
Name: index, dtype: bool
df['Check']=v
© www.soinside.com 2019 - 2024. All rights reserved.