计算分组后一组中最小值和最大值之间的差异



基于下面的df(测试(,我计算每组的平均值('col1','col2'(。之后,我想只使用"col1"来执行一个新的分组,并计算第一个分组创建的列"mean"的最小值和最大值之间的差。

如何以优雅的方式做到这一点?

test=pd.DataFrame({'col1':['B', 'A', 'A', 'B', 'B', 'C', 'C', 'A', 'A', 'B', 'B', 'C', 'C', 'B', 'C', 'C', 'A'],
'col2':['W', 'L', 'W', 'L', 'W', 'L', 'L', 'L', 'W', 'L', 'W', 'L', 'L', 'W', 'W', 'L', 'L'],
'value':[32,54,65,24,54,39,76,51,21,4,46,73,59,23, 43,23,12]})
print(test.groupby(['col1', 'col2'])[['value']].agg(
n=('value', 'count'),
mean=('value', 'mean')))

您可以使用numpy.ptp方法进行聚合:

(test.groupby(['col1', 'col2'])[['value']]
.agg(n=('value', 'count'), # this is now useless
mean=('value', 'mean'))
.groupby('col1').agg(diff=('mean', np.ptp))
)

备选方案:使用lambda g: g.max()-g.min()作为聚合函数。

输出:

diff
col1       
A      4.00
B     24.75
C     11.00

最新更新