我有一个像
这样的数据框 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()值来获取新数据帧?
答案 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)