Ваш код отличается, для того же вывода требуется сортировка по первым 2 столбцам - ['year_month','code']
или в этом примере данных пропустите его (если он уже отсортирован):
print (df['pct'].cumsum().le(20).mean())
0.6
df2 = df.sort_values(['year_month','code'], ascending=False)
print (df2['pct'].cumsum().le(20).mean())
0.6
В groupby значения сортировки в groupby
- здесь ['year_month', 'code']
, а не pct
:
df = df.groupby(['year_month', 'code'])['pct'].apply(lambda x: x.cumsum().le(20).mean())
print (df)
year_month code
201905 10 0.6
Name: pct, dtype: float64
Так что для одинаковой сортировки выходных данных здесь и по столбцу pct
и при необходимости для предотвращения сортировки по 'year_month', 'code']
добавляется sort=False
:
df2 = df.sort_values('pct', ascending=False)
print (df2['pct'].cumsum().le(20).mean())
0.2
df = (df.sort_values(['pct'], ascending=False)
.groupby(['year_month', 'code'], sort=False)['pct']
.apply(lambda x: x.cumsum().le(20).mean()))
print (df)
year_month code
201905 10 0.2
Name: pct, dtype: float64