Я полагаю, вы имеете в виду r = +_;
? В этом случае это преобразование параметра в Number
. Скажем, _
- '12 .3 ', затем +'12.3'
возвращает 12.3
. Поэтому в цитируемом заявлении +_
присваивается значение r
.
Другой метод, использующий apply()
, idxmax()
и idxmin()
>>df.groupby('class').apply(lambda x: x.drop([x['num'].idxmax(),x['num'].idxmin()])).rename_axis([None,None]).groupby('class').describe()
num
count mean std min 25% 50% 75% max
class
a 3.0 15.0 3.000000 12.0 13.5 15.0 16.5 18.0
b 3.0 55.0 4.582576 51.0 52.5 54.0 57.0 60.0
Объяснение: Сгруппировать по class
и удалить max
и min
Индекс значений из каждой группы. затем выполните групповую операцию на class
и вызовите функцию describe()
.
Используя transform
и маскируя:
df['max']=df.groupby('class')['num'].transform('max')
df['min']=df.groupby('class')['num'].transform('min')
mask = df['num'].ne(df['min'])&df['num'].ne(df['max'])
df.loc[mask,:].groupby('class')['num'].describe()
count mean std min 25% 50% 75% max
class
a 3.0 15.0 3.000000 12.0 13.5 15.0 16.5 18.0
b 3.0 55.0 4.582576 51.0 52.5 54.0 57.0 60.0
Или:
df.loc[mask, ['class', 'num']].groupby('class').describe()
num
count mean std min 25% 50% 75% max
class
a 3.0 15.0 3.000000 12.0 13.5 15.0 16.5 18.0
b 3.0 55.0 4.582576 51.0 52.5 54.0 57.0 60.0