首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法对行进行分类

无法对行进行分类
EN

Stack Overflow用户
提问于 2022-05-02 14:29:15
回答 2查看 36关注 0票数 0

循环不起作用。我试图按照if条件对行进行分组。但是,在运行代码之后,所有行都被分类为一个单独的类别“全局治理”。

代码语言:javascript
运行
复制
# create a for loop to re-group as per the values mentioned above

for values in data['Area']:
    if ((values=='corporate governance') | (values=='accounting') | (values== 'auditing') | (values=='manufacturing') | (values=='dao challenges')):
        data['final group']='corporate governance'
    
    elif (values=='blockchain governance' or values=='bct standards' or values== 'blockchain governance' or 
        values=='blockchain hashing' or values=='developers incentive' or values=='smart contract' or values=='Smart contract' ):
            data['final group']='Blockchain Technology Governance'   
        
    elif (values=='Block chain and legal compliance' or values=='Decision Rights' or values=='Dispute resolution' or
         values=='law' or  values=='judicature'):
            data['final group']='Judicature'
        
    elif (values == 'Blockchain and Trust'):
        data['final group']='Trust'
        
    elif ((values=='Foreign Aid') | (values=='Global Commons governance') | (values=='global Commons governance')):
        data['final group']='global governance'
        
    elif (values=='Public governance' or values=='Rural governance' or values=='Usage of bct in governance' or values=='public governance' or 
        values=='Smart city' or values=='smart city' or values=='Rural governance' or values=='national records'):
            data['final group']='governance'
        
    elif (values=='Music' or values=='Waste management' or values=='blockchian and healthcare' or values== 'forest management' or
        values=='healthcare' or 
        values=='Resource governance'):
                data['final group']='Resource governance'
    
    elif (values=='scientific publication' or values=='Academic Governance'):
        data['final group']='Academia'
        
    elif(values=='SDG' or values== 'carbon trading' or values=='environmental governance'):
        data['final group']='Sustainable developemnt'
        
    elif(values=='data governance' or values=='organisational data governance'):
        data['final group']='Data governance'
    
    elif(values=='digital platform governance' or values =='e commerce' or
       values=='platform governance' or values=='product management'):
            data['final group']='platform governance'
    
    elif(values=='Supplychain'):
        data['final group']=='Supplychain'  
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-02 15:24:20

从我的评论中扩展。循环循环遍历df列Area中的每一行;但是,当它设置列final group的值时,它将为列的每一行设置它。因此,您的dataframe中最后一行的Area正在确定每一行的final group值。相反,考虑一下像.apply()这样的东西

代码语言:javascript
运行
复制
def determine_final_group(area):
   
    if area in ['corporate governance','accounting','auditing','manufacturing','dao challenges']:
        return 'corporate governance'    
    elif area in ['blockchain governance','bct standards' ,'blockchain governance','blockchain hashing' ,'developers incentive' ,'smart contract' ,'Smart contract']:
        return 'Blockchain Technology Governance'           
    elif area in ['Block chain and legal compliance' ,'Decision Rights' ,'Dispute resolution', 'law','judicature']:
        return 'Judicature'        
    elif area == 'Blockchain and Trust':
        return 'Trust'        
    elif ['Foreign Aid','Global Commons governance','global Commons governance']:
        return 'global governance'
    
    #continue the elif logic using this pattern...  
   
data['final group'] = data['Area'].apply(determine_final_group)
票数 0
EN

Stack Overflow用户

发布于 2022-05-02 15:26:56

当您执行像data['final group']='corporate governance'这样的赋值时,为整个列分配这个值,而不仅仅是一行。

  1. 把它放进一个函数里,
  2. 返回最后一组(而不是分配)
  3. 并删除for-循环。
  4. 使用.map代替。
代码语言:javascript
运行
复制
def get_final_group(values):
    if values == 'corporate governance' or values == 'accounting' or values == 'auditing' or values == 'manufacturing' or values == 'dao challenges':
        return 'corporate governance'
    
    if (values == 'blockchain governance' or values == 'bct standards' or values == 'blockchain governance' or 
        values == 'blockchain hashing' or values == 'developers incentive' or values == 'smart contract' or values == 'Smart contract'):
        return 'Blockchain Technology Governance'  

    ...

df['final_group'] = df['Area'].map(get_final_group)

备注及影响:

  1. 因为它是returning值,所以不需要elif
  2. 不要使用| -这是为了一点点或。
  3. 不要使用过多的括号,这对可读性来说更糟
  4. 您可以重构if,使其更具可读性,例如: if领域(“公司治理”、“会计”、“审计”、“制造”、“道挑战”):返回“公司治理”#等等。
  5. 更好的是,使用字典来映射最终的价值: final_group ={‘公司治理’:‘公司治理’、‘会计’:‘公司治理’、‘审计’:‘公司治理’、‘制造’、‘公司治理’、‘道挑战’:‘公司治理’、‘区块链治理’、‘区块技术治理’、'bct标准‘:’区块链技术治理‘、’区块链治理‘:’区块链技术治理‘,“区块链哈希”:“区块链技术治理”,“开发人员激励”:“区块链技术治理”,“智能契约”:“区块链技术治理”,“智能契约”:“区块链技术治理”,#等}df‘’final_group‘=df’‘Area’..map(Final_group)
  6. 因为这非常冗长,所以您可以将其反转并使用每个目标作为字典键,所有可能的值都是这样的: final_group_categories ={“公司治理”:(“公司治理”、“会计”、“审计”、“制造”、“道挑战”)、“区块链技术治理”:(“区块链治理”,“'bct标准”、“块链治理”、“块链散列”、“开发人员奖励”、“智能契约”、“智能契约”、“等等”}#然后将其反转到映射函数中: final_group = {} for group_target,final_group_categories.items()中的调用: final_groupinval = group_target #--与dict理解相同: final_group = { inval : group_target for group_target,final_group_categories.items()中的调用用于invals }df‘’final_group‘=df’‘Area’..map(Final_group)
  7. 执行小写匹配,这样就不会有像'smart contract''Smart contract'这样的副本。df‘’final_group‘=df’‘Area’.str.lower().map(Final_group)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72088204

复制
相关文章

相似问题

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