首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Pandas中调用自定义函数

在Pandas中调用自定义函数
EN

Stack Overflow用户
提问于 2020-10-15 21:00:52
回答 1查看 42关注 0票数 0

我有2个不同的自定义函数定义。第一个函数接受一个参数,第二个函数接受两个参数。但是他们调用函数的方式不同,为什么我不能像调用第一个函数那样调用第二个函数呢?下面是我的两个函数,以及我如何调用它们。

代码语言:javascript
复制
Function with single argument:-

def convert_sqft_to_num(x):
    tokens = x.split('-')
    if len(tokens) == 2:
        return (float(tokens[0])+float(tokens[1]))/2
    try:
        return float(x)
    except:
        return None
        
df1.total_sqft = df1.total_sqft.apply(convert_sqft_to_num)

Second function with multiple arguments:-

def corr_sft_outlier(in_bhk, in_sft):
    bhk_band = np.quantile(outlierdf2[outlierdf2.bhk_size==in_bhk]['avg_sft'], (.20,.90))
    lower_band = round(bhk_band[0])
    upper_band = round(bhk_band[1])
    if (in_sft>=lower_band)&(in_sft<=upper_band):
        return in_sft
    elif (in_sft<lower_band):
        return lower_band
    elif (in_sft>upper_band):
        return upper_band
    else:
        return None

下面是第二个函数调用

代码语言:javascript
复制
outlierdf2['adj_avg_sft'] = outlierdf2.apply(lambda x: corr_sft_outlier(x['bhk_size'],x['avg_sft']), axis=1)

我想调用上面的函数,如下所示

代码语言:javascript
复制
outlierdf2['adj_avg_sft'] = outlierdf2[['bhk_size','avg_sft']].apply(corr_sft_outlier)
EN

回答 1

Stack Overflow用户

发布于 2020-10-16 00:39:11

在此部分中,不能调用具有2个参数和1个参数的函数:

代码语言:javascript
复制
outlierdf2[['bhk_size','avg_sft']].apply(corr_sft_outlier)

您传递的是“具有2列的df行”,而不是2个值。因此,无论是创建一个包含两列的框架(即outlierdf2["bhk_size","avg_sft"].apply)还是使用df本身调用它(即outlierdf2.apply),都必须传递适当数量的参数。所以你可以像这样改变你的函数,然后以你想要的方式调用它:

代码语言:javascript
复制
def corr_sft_outlier(row):
    in_bhk, in_sft = row['bhk_size'],row['avg_sft']
    bhk_band = np.quantile(outlierdf2[outlierdf2.bhk_size==in_bhk]['avg_sft'], (.20,.90))
    lower_band = round(bhk_band[0])
    upper_band = round(bhk_band[1])
    if (in_sft>=lower_band)&(in_sft<=upper_band):
        return in_sft
    elif (in_sft<lower_band):
        return lower_band
    elif (in_sft>upper_band):
        return upper_band
    else:
        return None

outlierdf2['adj_avg_sft'] = outlierdf2[['bhk_size','avg_sft']].apply(corr_sft_outlier,axis=1)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64372149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档