Удалить строки, когда вхождение значения столбца во фрейме данных меньше определенного числа с помощью pandas / python? - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть такой кадр данных:

df
col1    col2
A         1
B         1
C         2
D         3
D         2
B         1
D         5

Я видел, что значения col1 с B и D встречаются в кадре более одного раза.

Я хочу сохранитьте значения с вхождением более чем в один, окончательный кадр данных будет выглядеть так:

col1     col2
 B         1
 D         3
 D         2
 B         1
 D         5

Как сделать это наиболее эффективным способом, используя pandas / python?

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Вы можете использовать duplicated параметр keep=False, который будет возвращать True для всех повторяющихся значений в col1, а затем просто использовать логическое индексирование на кадре данных:

df[df.col1.duplicated(keep=False)]

   col1  col2
1    B     1
3    D     3
4    D     2
5    B     1
6    D     5

Обновление

Для хранения значений, когда col1 встречается более thr раз, используйте:

thr = 2
df[df.col1.duplicated(keep=False).groupby(df.col1).transform('sum').gt(thr)]

   col1  col2
3    D     3
4    D     2
6    D     5
0 голосов
/ 26 февраля 2019

Используйте DataFrame.duplicated с указанным столбцом col1 для поиска дубликатов с keep=False для возврата True с для всех строк дублирования, последний фильтр по boolean indexing:

df = df[df.duplicated('col1', keep=False)]
print (df)
  col1  col2
1    B     1
3    D     3
4    D     2
5    B     1
6    D     5

Если необходимо указать пороговое значение, используйте transform с size и фильтруйте так же, как и первое решение:

df = df[df.groupby('col1')['col1'].transform('size') > 1]
print (df)
  col1  col2
1    B     1
3    D     3
4    D     2
5    B     1
6    D     5

Альтернативное решение с value_counts и map:

df = df[df['col1'].map(df['col1'].value_counts()) > 1]

Если производительность не важна, используйте DataFrameGroupBy.filter:

df = df.groupby('col1').filter(lambda x: len(x) > 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...