熊猫:群体中最大值和最小值之间的差异

时间:2016-10-21 19:04:32

标签: python pandas numpy

给定一个看起来像这样的数据框

GROUP VALUE
  1     5
  2     2
  1     10
  2     20
  1     7

我想计算每组中最大值和最小值之间的差异。也就是说,结果应该是

GROUP   DIFF
  1      5
  2      18

在Pandas中这样做的简单方法是什么?

在Pandas中为大约200万行和100万组的数据框执行此操作的快速方法是什么?

3 个答案:

答案 0 :(得分:27)

使用@unutbu的df

每个时间
unutbu的解决方案最适合大型数据集

import pandas as pd
import numpy as np

df = pd.DataFrame({'GROUP': [1, 2, 1, 2, 1], 'VALUE': [5, 2, 10, 20, 7]})

df.groupby('GROUP')['VALUE'].agg(np.ptp)

GROUP
1     5
2    18
Name: VALUE, dtype: int64

np.ptp docs返回数组的范围

<强> 定时
df

enter image description here

df
df = pd.DataFrame(dict(GROUP=np.arange(1000000) % 100, VALUE=np.random.rand(1000000)))

enter image description here

df
许多群组
df = pd.DataFrame(dict(GROUP=np.arange(1000000) % 10000, VALUE=np.random.rand(1000000)))

enter image description here

答案 1 :(得分:16)

当您利用内置聚合器(例如groupby/agg'max')时,

'min'通常效果最佳。因此,要获得差异,请首先计算maxmin,然后减去:

import pandas as pd
df = pd.DataFrame({'GROUP': [1, 2, 1, 2, 1], 'VALUE': [5, 2, 10, 20, 7]})
result = df.groupby('GROUP')['VALUE'].agg(['max','min'])
result['diff'] = result['max']-result['min']
print(result[['diff']])

产量

       diff
GROUP      
1         5
2        18

答案 2 :(得分:7)

您可以使用groupby()min()max()

df.groupby('GROUP')['VALUE'].apply(lambda g: g.max() - g.min())