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

Mic*_*cht 5 python pandas

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

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

df.groupby(['ColumnA', 'ColumnB']).apply(somefunction)
Run Code Online (Sandbox Code Playgroud)

这里somefunction适用于每个group,然后返回.基本上我在这里使用这个例子.

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

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

df.groupby(['ColumnA', 'ColumnB']).apply(somefunction)
Run Code Online (Sandbox Code Playgroud)

有没有办法让这项工作?我不能传递groupsomefunction,因为那是奇迹般地完成.apply()的背景.

piR*_*red 9

你可以传递关键词参数 apply

df.groupby(['ColumnA', 'ColumnB']).apply(somefunction, column_name='col')
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)