Как проверить, повторяются ли элементы в столбце pandas с несколькими списками? - PullRequest
2 голосов
/ 27 мая 2020

У меня есть это 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

Есть ли способ сделать это с помощью pythoni c, или мне нужно будет применить набор for предложений? (for i in object: for k in list ...). Поскольку мой файл довольно большой, я боюсь, что он будет очень тяжелым.

Ответы [ 2 ]

2 голосов
/ 27 мая 2020

Аналогично ответу Бена, но с использованием 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 голосов
/ 27 мая 2020

Мы можем сделать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...