groupby之后如何获取组大小的统计信息?

时间:2018-08-23 15:57:46

标签: python pandas dataframe

我有这个数据框:

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在一个组中,而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.

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

df['GROUP'] = df['ID'].map(lambda x: 'A' if x in ['1','2'] else 'B')
df



    ID  Code    TIMESTAMP   VALUE   GROUP
0   1   AAA      12345        11    A
1   1   AAB      12346        12    A
2   2   AAC      12345         1    A
3   2   AAC      12347        11    A
4   2   AAD      12348         1    A
5   3   ABC      12345         2    B
6   3   BBB      12448         1    B
7   3   BBB      12449         1    B
8   3   AAD      12450         2    B
9   3   AAE      12450         1    B
10  4   BBD      12346         1    B


df.groupby(['GROUP'])['VALUE'].describe()[['min', 'max', 'mean']]



       min    max       mean
GROUP           
A      1.0    12.0      7.200000
B      1.0    2.0       1.333333