Количество вхождений наивысших и 2-х наибольших значений после группового в Пандах - PullRequest
1 голос
/ 18 июня 2019

У меня есть датафрейм, как показано ниже

Itr	Type	Start	Values
2	1	101	20.402
2	1	102	20.402
2	1	103	20.399
2	1	104	20.399
2	1	105	20.399
2	1	106	20.383
2	1	107	20.383
2	1	108	20.383
2	1	109	20.383
2	1	110	20.383
2	1	111	20.36
2	1	112	20.36
2	1	113	20.36
2	1	114	20.36
2	1	115	20.36
2	1	116	20.36
2	1	117	20.36
2	1	118	20.36
2	1	119	20.36
2	1	120	20.36
3	1	121	20.348
3	1	122	20.348
3	1	123	20.348
3	1	124	20.348
3	1	125	20.348
3	1	126	20.34
3	1	127	20.34
3	1	128	20.34
3	1	129	20.34
3	1	130	20.34
3	1	131	20.337
3	1	132	20.337
3	1	133	20.337
3	1	134	20.337
3	1	135	20.337
3	1	136	20.342
3	2	121	20.058
3	2	122	20.058
3	2	123	20.058
3	2	124	20.058
3	2	125	20.043
3	2	126	20.043
3	2	127	20.043
3	2	128	20.043
3	2	129	20.043
3	2	130	20.035
3	2	131	20.035
3	2	132	20.035
3	2	133	20.035
3	2	134	20.035
3	2	135	20.021

Я хочу выполнить группировку итераций (Itr) & Type, а затем найти количество вхождений максимального значения и количество вхождений 2-го максимального значения. Например, для группового Irr 2 и цикла 1 результат должен быть 2 и 3, потому что 20,402 (максимальное значение) встречается дважды, а 20,399 (2-е максимальное значение) встречается трижды. Я пытался, но безуспешно. Есть ли способ сделать это? Спасибо

1 Ответ

1 голос
/ 18 июня 2019

Сначала получите маску из верхних значений в каждой группе.Затем получите размер замаскированного DataFrame.

m = df.groupby(['Itr', 'Type'])['Values'].transform(lambda x: x.isin(x.drop_duplicates().nlargest(2)))
df.where(m).groupby(['Itr', 'Type', 'Values']).size()

Itr  Type  Values
2.0  1.0   20.399    3
           20.402    2
3.0  1.0   20.342    1
           20.348    5
     2.0   20.043    5
           20.058    4
dtype: int64

Альтернативно с groupby + value_counts, затем sort и groupby + tail, чтобы сохранить 2 самых больших значения в пределахгруппы.

(df.groupby(['Itr', 'Type'])['Values'].value_counts()
   .sort_index(level=2)
   .groupby(level=[0, 1]).tail(2))

Itr  Type  Values
3    2     20.043    5
           20.058    4
     1     20.342    1
           20.348    5
2    1     20.399    3
           20.402    2
Name: Values, dtype: int64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...