【问题标题】:How to give multiple conditions in if elif conditions in python pandas script如何在python pandas脚本中的if elif条件中给出多个条件
【发布时间】:2019-11-17 18:43:15
【问题描述】:

我有这样的代码:

def sample_func(new_df):

   if ( new_df['name'] == 'Tom'):
      return "Yes"
   elif( new_df['name'].isin(['Harry', 'Jerry', 'Savi', 'Aavi'])):
      return "Common Name"
   else:
      return None

我收到错误:

ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。

如何修复此类错误?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    使用numpy.select:

    def sample_func(new_df):
    
        m1 = new_df['name'] == 'Tom'
        m2 = new_df['name'].isin(['Harry', 'Jerry', 'Savi', 'Aavi'])
    
        new_df['new'] = np.select([m1, m2], ['Yes','Common Name'], default=None)
        return new_df
    

    有关您的错误的更多信息是here

    【讨论】:

    • 我现在收到此错误,“ValueError:形状不匹配:对象无法广播到单个形状”,我​​正在执行此操作的场景是变量 m1 和 m2 中的列名不同。
    • @Dhiraj - print (new_df.columns) 是什么?
    • @Dhiraj - 因为我猜有重复的列名,2 个或更多 name
    • 我可以看到带有所需值的新列,但你能解释一下为什么我会收到 ValueError
    【解决方案2】:

    我已经用any 修改了你的代码以获得结果:-

    def sample_func(new_df):
        if any( new_df['name'] == 'Tom'):
            return "Yes"
        elif any( new_df['name'].isin(['Harry', 'Jerry', 'Savi', 'Aavi'])):
            return "Common Name"
        else:
            return None
    

    输出

    Yes
    

    希望对你有帮助。

    【讨论】:

    • 我看不出您将 elif 转换为 else if 嵌套块的原因
    • @AnkitAgrawal 第一个elsefor 循环相关,并且这个else 包含if-else
    • 是的,我知道,但是为什么不将它包含在简单的 if elif else 块中,就像有问题的@Rahulcharan
    • @AnkitAgrawal 是的,您也可以使用if elif else 编写代码。我修改了我的代码,你可以看到。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多