Pandas使用groupby为groupby变量的每个值应用不同的函数

时间:2014-12-05 15:31:29

标签: python pandas

我想使用groupby,但我不想将相同的功能应用于每个组,而是指定要应用于哪个组值的函数。我在这里提供了一个非常简单的例子来说明这一点,但实际上我的groupby变量有很多值,而且我的函数都是用户定义的并且相当复杂 - 所以解决方案涉及单独选择每个组或将相同的功能应用于所有组都是不切实际的。 (这类非常相似的问题提供了类似的答案:how to apply different functions to each group of pandas groupby?但他们没有解决我的问题)

df = DataFrame({'Category': ['A','A','A','B','B','B','C','C','C'],
               'Total': [1, 2, 3, 1, 2, 3, 1, 2, 3]})

我希望能够为我的groupby变量的每个级别指定一个函数:

function_map = {'A': np.mean,
                'B': np.max,
                'C': np.min}

我希望能做的是这样的事情:

df.groupby('Category').apply(function_map)

我想要的结果形式看起来像这个DataFrame:

result = DataFrame({'Category': ['A','B','C'],
               'Total': [2, 3, 1]})

1 个答案:

答案 0 :(得分:2)

只需使用lambda,就像这样

df.groupby('Category').apply(lambda r: function_map[r.name](r.Total))

另外,您应该使用numpy函数np.meannp.maxnp.min