Python Pandas GroupBy:应用具有两个参数的函数

Python Pandas GroupBy:应用具有两个参数的函数,python,pandas,Python,Pandas,通常在使用.apply()方法时,传递的函数只接受一个参数 def somefunction(group): group['ColumnC'] == group['ColumnC']**2 return group df.groupby(['ColumnA', 'ColumnB']).apply(somefunction) 这里somefunction应用于每个组,然后返回。基本上我用的是这个 我希望能够事先不指定列名ColumnC。将其作为somefunction的参数传递

通常在使用
.apply()
方法时,传递的函数只接受一个参数

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

df.groupby(['ColumnA', 'ColumnB']).apply(somefunction)
这里
somefunction
应用于每个
,然后返回。基本上我用的是这个

我希望能够事先不指定列名
ColumnC
。将其作为
somefunction
的参数传递将使代码更加灵活

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

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

有什么办法可以让这一切顺利进行吗?我无法将
group
传递给
somefunction
,因为这是由
.apply()
在后台神奇地完成的。

您可以通过
apply
传递关键字参数

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


您可以创建一个匿名函数

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

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