Отфильтруйте фрейм данных в строках, которые отличаются от предыдущей строки (в данном случае, даты) [duplicate]

for (Iterator<String> itr = someList.iterator(); itr.hasNext(); ) {
   String item = itr.next();
   System.out.println(item);
}
60
задан Jamie Bull 15 May 2014 в 02:28
поделиться

5 ответов

Теперь это намного проще в пандах с drop_duplicates и параметром keep.

import pandas as pd
df = pd.DataFrame({"A":["foo", "foo", "foo", "bar"], "B":[0,1,1,1], "C":["A","A","B","A"]})
df.drop_duplicates(subset=['A', 'C'], keep=False)
109
ответ дан Ben 27 August 2018 в 01:19
поделиться

Собственно, отбрасывать строки 0 и 1 требуется только (любые наблюдения, содержащие совпадающие A и C, сохраняются.):

In [335]:

df['AC']=df.A+df.C
In [336]:

print df.drop_duplicates('C', take_last=True) #this dataset is a special case, in general, one may need to first drop_duplicates by 'c' and then by 'a'.
     A  B  C    AC
2  foo  1  B  fooB
3  bar  1  A  barA

[2 rows x 4 columns]

Но я подозреваю, что вы действительно этого хотите (одно наблюдение, содержащее согласованное A и C сохраняется.):

In [337]:

print df.drop_duplicates('AC')
     A  B  C    AC
0  foo  0  A  fooA
2  foo  1  B  fooB
3  bar  1  A  barA

[3 rows x 4 columns]

Изменить:

Теперь это намного яснее, поэтому:

In [352]:
DG=df.groupby(['A', 'C'])   
print pd.concat([DG.get_group(item) for item, value in DG.groups.items() if len(value)==1])
     A  B  C
2  foo  1  B
3  bar  1  A

[2 rows x 3 columns]
2
ответ дан CT Zhu 27 August 2018 в 01:19
поделиться

использовать groupby и filter

import pandas as pd
df = pd.DataFrame({"A":["foo", "foo", "foo", "bar"], "B":[0,1,1,1], "C":["A","A","B","A"]})
df.groupby(["A", "C"]).filter(lambda df:df.shape[0] == 1)
8
ответ дан HYRY 27 August 2018 в 01:19
поделиться

Просто хочу добавить ответ Бена на drop_duplicates :

keep: {'first', 'last', False}, по умолчанию 'first'

  • сначала: удалить дубликаты, кроме первого вхождения.
  • last: удалить дубликаты, за исключением последнего вхождения.
  • False: удалить все дубликаты.

Итак, установите keep в False, мы дадим вам желаемый ответ.

DataFrame.drop_duplicates (* args, ** kwargs) Возвращает DataFrame с дублирующимися строками, только с учетом определенных столбцов

Параметры: подмножество: метка столбца или последовательность меток, необязательно Учитывать только определенные столбцы для идентификации дубликатов, по умолчанию использовать все столбцы: {'first', 'last', False }, по умолчанию сначала «первым»: сбросить дубликаты, за исключением первого вхождения. last: удалить дубликаты, за исключением последнего вхождения. False: удалить все дубликаты. take_last: устаревший inplace: boolean, по умолчанию False Отбрасывать дубликаты на месте или возвращать копии cols: только аргумент kwargs подмножества [устаревший] Возвраты: дедуплицированный: DataFrame

16
ответ дан Jake 27 August 2018 в 01:19
поделиться

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

df.drop_duplicates(keep=False)

или

df.drop_duplicates(keep=False, inplace=False)

Если один и тот же набор данных необходимо обновить:

df.drop_duplicates(keep=False, inplace=True)

Вышеприведенные примеры удаляют все дубликаты и сохраняют один, похожий на DISTINCT * в SQL

1
ответ дан Suraj Rao 27 August 2018 в 01:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: