2017-04-25 179 views
5

通常在使用.apply()方法时,会传递一个函数,该函数只需要一个参数。Pandas GroupBy:应用带两个参数的函数

def somefunction(group): 
    group['ColumnC'] == group['ColumnC']**2 
    return group 

df.groupby(['ColumnA', 'ColumnB']).apply(somefunction) 

这里somefunction被应用于每个group,然后将其返回。基本上我使用这个example here

我希望有能力事先未指定列名称ColumnC。将它作为参数somefunction传递会使代码更加灵活。

def somefunction(group, column_name): 
    group[column_name] == group[column_name]**2 
    return group 

df.groupby(['ColumnA', 'ColumnB']).apply(somefunction) 

有什么办法,使这项工作?我不能通过groupsomefunction,因为在后台神奇地完成了.apply()

回答

6

您可以通过apply

df.groupby(['ColumnA', 'ColumnB']).apply(somefunction, column_name='col') 

MCVE

df = pd.DataFrame(dict(A=list(range(2)) * 5, B=range(10)[::-1])) 

def f(df, arg1): 
    return df * arg1 

df.groupby('A').apply(f, arg1=3) 

    A B 
0 0 27 
1 3 24 
2 0 21 
3 3 18 
4 0 15 
5 3 12 
6 0 9 
7 3 6 
8 0 3 
9 3 0 
+0

这比预期的更容易。谢谢! –

+0

@mischi很高兴我能帮到你。 – piRSquared

1

通过关键字参数可以使一个匿名函数

df.groupby(['ColumnA', 'ColumnB']).apply(lambda x: somefunction(x, 'col'))

相关问题