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