通常在使用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
在后台神奇地完成的。
答案 0 :(得分:9)
您可以通过apply
df.groupby(['ColumnA', 'ColumnB']).apply(somefunction, column_name='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
答案 1 :(得分:1)
您可以制作匿名函数
df.groupby(['ColumnA', 'ColumnB']).apply(lambda x: somefunction(x, 'col'))