Удалить последовательные значения Specifi c Number - Python Dataframe - PullRequest
1 голос
/ 04 августа 2020

Как вы можете удалить последовательные дубликаты указанного c значения?

Я знаю функцию groupby(), но она удаляет последовательные дубликаты любого значения.

См. Пример код ниже. Указанное значение c равно 2, в котором я хочу удалить дубликаты

import pandas as pd
from itertools import groupby

example = [1,1,5,2,2,2,7,9,9,2,2]
Col1 = pd.DataFrame(res)
# This does not work for just a specific number
res = [i[0] for i in groupby(Col1)] 

В результате DataFrame будет [1,1,5,2,7,9,9,2]

Ответы [ 3 ]

1 голос
/ 04 августа 2020

Выполнение этого с помощью pandas кажется излишним, если вы не используете pandas для других целей, например:

In []:
import itertools as it
example = [1,1,5,2,2,2,7,9,9,2,2]
[x for k, g in it.groupby(example) for x in ([k] if k == 2 else g)]

Out[]:
[1, 1, 5, 2, 7, 9, 9, 2]
0 голосов
/ 04 августа 2020

Вот короткий и красивый лайнер для вашего удовольствия:

example = [1,1,5,2,2,2,7,9,9,2,2]

[v for i, v in enumerate(example) if i == 0  or (not (v == 2 and v == example[i-1]))]
0 голосов
/ 04 августа 2020

Попробуйте использовать разницу столбца, равную 0.

В вашем случае, когда мы заботимся о дедупликации только тогда, когда значение столбца равно 2, мы устанавливаем условие, что разница не равна нулю или столбец не равен равно 2:

import pandas as pd

example = [1,1,5,2,2,2,7,9,9,2,2]

df = pd.DataFrame(dict(a=example))
df.loc[(df.a.diff() != 0) | (df.a != 2)]
...