假设我有一个像这样的数据帧:
n = 20 dim1 = np.random.randint(1, 3, size=n) dim2 = np.random.randint(3, 5, size=n) data1 = np.random.randint(10, 20, size=n) data2 = np.random.randint(1, 10, size=n) df = pd.DataFrame({'a': dim1, 'b': dim2 ,'val1': data1, 'val2': data2})
如果我定义一个返回分组的函数:
def h(x): if x['val2'].sum() == 0: return 0 else: return (x['val1'].sum())*1.0/x['val2'].sum()*1.0
按列之一进行分组并聚合返回结果:
df.groupby(['a']).aggregate(h)['val1']
虽然它将所有现有列转换为所需结果,而不是添加新列
使用聚合时,按两列分组会导致错误:
df.groupby(['a','b']).aggregate(h)['val1'] KeyError: 'val2'
但转换聚合申请似乎有效.
我有两个问题:
为什么应用工作而不是聚合?
如果在通过某组键对数据帧进行分组后,我想使用将组值聚合为新列的函数,那么最好的方法是什么?
提前致谢.