我有这个功能:
def function(row,args):
array = np.array(row['Revenue'+args[0]:'Revenue'+str(args[1])]).astype(float)
if np.mean(array) < (5000/12):
return 'XXS'
if np.mean(array) < (10000/12):
return 'XS'
if np.mean(array) < (25000/12):
return 'S'
if np.mean(array) < (50000/12):
return 'M'
if np.mean(array) < (250000/12):
return 'L'
if np.mean(array) < (750000/12):
return 'XL'
if np.mean(array) >= (750000/12):
return 'XXL'
我想使用Pandas.Dataframe.apply()来应用此函数。所以我使用args,因为我需要传递两个额外的参数。
df.apply(function,axis=1,args=(VARIABLE1,VARIABLE2))
不知怎的,我得到了错误:
TypeError: ('klantschaling() takes 2 positional arguments but 3 were given')
我显然给出了两个参数:dataframe row和args。那么为什么我会收到错误?
答案 0 :(得分:1)
您有两种选择。您可以修改函数签名,也可以在df.apply
中传递元组。
第一个选项是重新定义你的功能:
def function(row, arg1, arg2):
...
然后按原样拨打df.apply
。第二个更简单的替代方法是将参数包装在一个可迭代的中:
df.apply(function, axis=1, args=([VARIABLE1, VARIABLE2], ))
或者,
df.apply(function, axis=1, args=((VARIABLE1, VARIABLE2), ) )