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

时间:2017-04-25 16:15:16

标签: python pandas

通常在使用def somefunction(group): group['ColumnC'] == group['ColumnC']**2 return group df.groupby(['ColumnA', 'ColumnB']).apply(somefunction) 方法时,会传递一个只接受一个参数的函数。

somefunction

此处group适用于每个ColumnC,然后返回。我基本上使用这个example here

我希望能够事先不指定列名somefunction。将其作为def somefunction(group, column_name): group[column_name] == group[column_name]**2 return group df.groupby(['ColumnA', 'ColumnB']).apply(somefunction) 的参数传递将使代码更加灵活。

group

有没有办法让这项工作?我无法将somefunction传递给.apply(),因为这是b val xor val 1111 xor 1111 = 0000 1110 xor 1111 = 0001 1101 xor 1111 = 0010 . . . 0001 xor 1111 = 1110 0000 xor 1111 = 1111 在后​​台神奇地完成的。

2 个答案:

答案 0 :(得分:9)

您可以通过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

答案 1 :(得分:1)

您可以制作匿名函数

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