我有这个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
...). 由于我的文件比较大,恐怕会很重。
类似于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
我们可以做到 explode
然后做 transform
与 nunqiue
找指数 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