首页 > 解决方案 > groupby后如何获取组大小的统计信息?

问题描述

我有这个数据框:

ID   Code    Timestamp   Value
1    AAA      12345        11
1    AAB      12346        12
2    AAC      12345         1
2    AAC      12347        11
2    AAD      12348         1
3    ABC      12345         2
3    BBB      12448         1
3    BBB      12449         1
3    AAD      12450         2
3    AAE      12450         1
4    BBD      12346         1

ID 1 和 2 属于一组,而 ID 3 和 4 属于另一组。我想获得每个组的行大小的平均值、最小值和最大值。

例如,具有 1 和 2 的组的平均值、最小值和最大值为:2.5、2、3。具有 3 和 4 的组的平均值、最小值和最大值为:3、1、5。

我试图做的是

def partition():
  if id in [1, 2]:
    return "Group A"
  else:
    return "Group B"

groupedDf = dataframe.groupby([partition, 'id'])

print(groupedDf.size())
#print it will give me

Group A   ID
          1       2
          2       3
Group B   ID
          3       5
          4       1

但我找不到如上所述的优雅或熊猫方式来查找均值、最小值和最大值。我现在能想到的只是经典的迭代方式,比如:

for (key, group) in groupedDf
    #do heavy lifting calculation here to get what I want.

希望问题足够详细,有人可以帮助我。

标签: pythonpandasdataframe

解决方案


df['Group'] = np.where(df['ID'].isin([1, 2]), 'A', 'B')
df2 = df.groupby(['Group','ID']).size()
df2.groupby('Group').agg(['mean', 'min', 'max'])

这是我得到的:

       mean  min  max
Group                
A       2.5    2    3
B       3.0    1    5

推荐阅读