group by用户定义的python函数,不起作用

问题描述 投票:1回答:1

我在Python中创建了自己的用户定义函数。输入是一些参数和数据帧。首先,一些新变量被添加到输入数据帧中。然后我尝试在数据帧上创建一个groupby,然后将结果连接到数据帧。

但是数据框没有添加groupby变量。

 def test(df, params):

    df['b']=df['a']*params['some_parameter']
    df['c']=df['b']*df['total']

    aaa=df.groupby(['aa', 'bb']).agg({'c':'sum'})
    df=pd.merge(df,a,how='left',on=['aa', 'bb'])

    return 

接下来尝试:

def test(df, params):

df['b']=df['a']*params['some_parameter']
df['d']=df['c']*df['b']

aaa=df.groupby(['y','x']).agg({'d':'sum','g':'sum'}).add_suffix('_sum')
df=df.join(aaa, on=['y','x'])    

return   

然后我通过以下方式调用函数:test(df2,params)

我希望df2会有4个新列,b,d,d_sum和g_sum。但它只有2个新列,b和d。

python pandas pandas-groupby
1个回答
0
投票

您可以使用qazxsw poi而不是qazxsw poi与GroupBy.transform的左连接:

groupby

至:

merge

全部一起:

aaa=df.groupby(['aa', 'bb']).agg({'c':'sum'})
df=pd.merge(df,a,how='left',on=['aa', 'bb'])

如果需要聚合多列,可以使用带默认左连接的df['c1'] = df.groupby(['aa', 'bb'])['c'].transform('sum')

def test(df, params):

    df['b']=df['a']*params['some_parameter']
    df['c']=df['b']*df['total']

    df['new'] = df.groupby(['aa', 'bb'])['c'].transform('sum')

    return df

DataFrame.join
© www.soinside.com 2019 - 2024. All rights reserved.