我需要对数据框中的不同变量计算不同的数学运算。我的数据如下所示:
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
我尝试了一些代码,并在不同的网站上进行了搜索,但没有得到所需的解决方案。
请任何人帮助我解决这个问题。
谢谢。
答案 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。