Используйте groupby
+ size
+ head
, чтобы получить самые большие 'codsprod'
группы.Используйте .isin
, чтобы отфильтровать оригинал DataFrame
.Чтобы получить самые большие 2 группы:
df[df.codsprod.isin(df.groupby('codsprod').size().head(2).index)]
Вывод:
idcontrn ctosaldo fecanota diamovto fecopera codsprod
0 491748 0 2017-08-25 3 2017-08-25 0
2 1907630 0 2017-06-12 99999 2017-06-09 21
3 1573897 0 2018-01-25 613 2018-01-25 0
4 1713456 0 2017-08-08 17 2017-08-07 0
5 186315 0 2017-06-29 13 2017-06-28 0
Объяснение:
df.groupby('codsprod').size()
возвращает Series
, который отсортирован вв порядке убывания в зависимости от размера группы.Значения этого Series
являются размерами группы, а индекс этого Series
является соответствующим значением 'codsprod'
:
df.groupby('codsprod').size()
#codsprod
#0 4
#21 1
#33 1
#78 1
#84 1
#dtype: int64
Взятие .head(n)
вернет только верхнюю n
записи, которые в данном случае являются n
самыми большими группами.Но обратите внимание, что это не имеет отношения к связям, оно просто берет то, что появляется первым (это не было бы слишком сложно включить все, что также связывает):
df.groupby('codsprod').size().head(2)
#codsprod
#0 4
#21 1
#dtype: int64
На данный момент вам все равноо том, насколько велики группы, вы хотите знать , какие группы самые большие.Так что вам нужны индексы этой серии.
df.groupby('codsprod').size().head(2).index
#Int64Index([0, 21], dtype='int64', name='codsprod')
Это в основном список значений 'codsprod'
, и для фильтрации DataFrame
на основе значения, равного любому значению в этом списке, вы используете .isin