python中的groupby函数

时间:2018-08-22 09:54:52

标签: pandas apply pandas-groupby

我需要对数据框中的不同变量计算不同的数学运算。我的数据如下所示:

 y    x1  x2 x3
 NB    1   4   2
 SK    2   5   3
 SK    3   6   6
 NB    4   7   9

我想将mydata与y变量分组,并且必须计算sum(x1),max(x2)。此外,我还必须将一些user_defined函数应用于x3。

我希望我的分组输出仅具有pandas数据帧格式的4个变量y,x1,x2,x3,如下所示。

 y    x1  x2 x3
 NB    5   7   5
 SK    5   6   5  

我尝试了一些代码,并在不同的网站上进行了搜索,但没有得到所需的解决方案。

请任何人帮助我解决这个问题。

谢谢。

2 个答案:

答案 0 :(得分:3)

使用.groupby时,可以与.agg进行汇总。可以使用某些预定义的函数,但是您也可以使用lambda来应用任何用户定义的函数,其中传递给函数的参数是该组的值:

from io import StringIO

import pandas as pd


data = StringIO('''y    x1  x2 x3
NB    1   4   2
SK    2   5   3
SK    3   6   6
NB    4   7   9''')


def func(values):
    return sum(values)/50

df = pd.read_csv(data, sep='\s+')

summaries = df.groupby('y').agg({'x1': 'sum',
                                 'x2': 'max',
                                 'x3': lambda vals: func(vals)})

print(summaries)

此打印:

    x1  x2    x3
y               
NB   5   7  0.22
SK   5   6  0.18

答案 1 :(得分:0)

df.groupby(df.index)[‘x1’].agg(lambda x: sum(x.values)

您可以更改在给定列上执行的任何操作的lambda。