如何将总和除以熊猫组中的大小

时间:2016-09-28 18:28:40

标签: python pandas

我有一个像

这样的数据框
  ID_0 ID_1  ID_2
0    a    b     1
1    a    c     1
2    a    b     0
3    d    c     0
4    a    c     0
5    a    c     1

我想通过[' ID_0' ID_1']进行分组,并生成一个新的数据帧,其中每个组的ID_2值之和除以中的行数每个小组。

grouped  = df.groupby(['ID_0', 'ID_1'])
print grouped.agg({'ID_2': np.sum}), "\n", grouped.size()

给出

           ID_2
ID_0 ID_1
a    b        1
     c        2
d    c        0
ID_0  ID_1
a     b       2
      c       3
d     c       1
dtype: int64

如何使用np.sum值除以size()值来获取新数据帧?

2 个答案:

答案 0 :(得分:2)

改为使用groupby.apply

df.groupby(['ID_0', 'ID_1']).apply(lambda x: x['ID_2'].sum()/len(x))

ID_0  ID_1
a     b       0.500000
      c       0.666667
d     c       0.000000
dtype: float64

答案 1 :(得分:0)

使用矢量化方法可能会更快,而不是使用apply()

import numpy as np

df['count'] = df['ID_0']  # copy column for counting

df = df.groupby(['ID_0', 'ID_1']).agg({
    'ID_2' : np.sum,
    'count': np.size
}).reset_index()

df['ID_2'] /= df['count']
df = df.drop(['count'], axis=1)