amb*_*ber 3 python dataframe pandas pandas-groupby
我正在使用 pandasgroupby函数并尝试获取分组结果的描述,但没有每个组的最大和最小行。我找不到我的问题的正确答案。
data = {'class': ['a', 'a', 'a', 'a', 'a', 'b', 'b', 'b', 'b', 'b'],
'num': [-10,18,12,15,50, 10,60,51,54,100]}
df = pd.DataFrame(data)
df.groupby('class').describe()
Run Code Online (Sandbox Code Playgroud)
输出:
num
count mean std min 25% 50% 75% max
class
a 5.0 17.0 21.494185 -10.0 12.0 15.0 18.0 50.0
b 5.0 55.0 31.984371 10.0 51.0 54.0 60.0 100.0
Run Code Online (Sandbox Code Playgroud)
我想要的结果是:
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
Run Code Online (Sandbox Code Playgroud)
使用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
Run Code Online (Sandbox Code Playgroud)
或者:
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
Run Code Online (Sandbox Code Playgroud)