首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >整数的DataFrame .isin

整数的DataFrame .isin
EN

Stack Overflow用户
提问于 2022-01-18 12:59:09
回答 1查看 642关注 0票数 0

我已经创建了一个条件集,如果条件是否满足,它将返回1/ 0。

代码语言:javascript
复制
avg_ActivityScore = company['ActivityScore'].median()
min_EmployeeLowerBound = 10
list_LegalFormIDs = [112, 121, 301, 118, 141, 703, 111, 705, 921, 117, 361, 391, 711]
min_CompaniesCount = 10

def flag_company(df):
    if (df['ActivityScore'] >= avg_ActivityScore):
        return 1
    elif (df['EmployeeLowerBound'] >= min_EmployeeLowerBound):
        return 1
    elif (df['LegalFormID'].isin(list_LegalFormIDs)):
        return 1
    else:
        return 0

然后我在DataFrame上应用这个函数,如下所示:

代码语言:javascript
复制
df['Flag'] = df.apply(flag_company, axis = 1)

然而,它返回一个错误消息- int‘object没有属性'isin’。有什么想法,我可以改变,以保持功能,请?

如果我使用下面的代码,它可以正常工作,不会出现任何问题:

代码语言:javascript
复制
df.loc[df['LegalFormID'].isin(list_LegalFormIDs)]

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-18 13:01:01

DataFrame.apply中使用标量,因此不能将函数用于Series,因为df['LegalFormID']是标量内的函数:

代码语言:javascript
复制
def flag_company(df):
    print (df['ActivityScore'])
    
    if (df['ActivityScore'] >= avg_ActivityScore):
        return 1
    elif (df['EmployeeLowerBound'] >= min_EmployeeLowerBound):
        return 1

    #check scalar by in
    elif (df['LegalFormID'] in list_LegalFormIDs):
        return 1
    else:
        return 0

Series一起工作的矢量化解决方案是:

代码语言:javascript
复制
m1 = df['ActivityScore'] >= avg_ActivityScore
m2 = df['EmployeeLowerBound'] >= min_EmployeeLowerBound
m3 = df['LegalFormID'].isin(list_LegalFormIDs)

df['Flag'] = (m1 | m2 | m3).astype(int)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70755998

复制
相关文章

相似问题

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