【问题标题】:Applying an If function to a dataframe [duplicate]将If函数应用于数据框[重复]
【发布时间】:2019-08-20 15:06:55
【问题描述】:

我正在尝试将 IF 函数应用于数据框中的列。很简单,如果工资超过 50,000 英镑,我希望它返回“超过 50,000 英镑”,如果低于,我希望它返回“低于 50,000 英镑”。

我已经尝试了下面的代码,但我遇到了错误消息。我已经对在处理数据帧时使用 apply 函数进行了一些研究,因此定义了一个函数并使用了下面的第二段代码,但得到了第二条错误消息。

    salary = employees['Salary']

    if Salary > 50000:
        print('Over £50,000')
    else:
        print('Under £50,000')

申请方法

    def SalaryCheck():
        if Salary > 50000:
            print('Over £50,000')
        else:
            print('Under £50,000') 

    employees.Salary.apply(SalaryCheck)


    Traceback (most recent call last):
      File "<input>", line 1, in <module>
      File "C:\Users\Peter\PycharmProjects\untitled\venv\lib\site-                        packages\pandas\core\generic.py", line 1556, in __nonzero__
        self.__class__.__name__
    ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

应用方法警告

    Traceback (most recent call last):
      File "<input>", line 1, in <module>
      File "C:\Users\Peter\PycharmProjects\untitled\venv\lib\site-        packages\pandas\core\series.py", line 4038, in apply
        mapped = lib.map_infer(values, f, convert=convert_dtype)

【问题讨论】:

  • def SalaryCheck(x) 然后检查if x &gt; 50000,尽管这可以在不使用np.where 的情况下完成。见stackoverflow.com/questions/19913659/…
  • 嗨彼得,我很确定你的问题是由于你的 SalaryCheck 函数没有为它定义任何参数,所以 if Salary &gt; 50000 看起来实际上是指数据框中的每一份薪水,而不是任何一个特定的薪水。 Gokul的回答应该对你有所帮助。也就是说,这个问题是由一个简单的印刷问题引起的,因此很可能作为本网站的题外话而被关闭。
  • Peter,在您的第一个示例中,大写 Salary 定义在哪里?至于第二个,这似乎是对错误消息的更好解释,值得了解以了解 pandas 为何不高兴:stackoverflow.com/a/45494393/5590742(编辑:将旧评论替换为更清晰的链接)。

标签: python pandas dataframe if-statement


【解决方案1】:

另一种方法:

(employee['salary'] > 50000).replace({True: 'Over', False: 'Under'})

employee['salary'] &gt; 50000 返回一系列 True / False,然后您只需将 True 和 False 替换为您想要的文本。

【讨论】:

    【解决方案2】:

    您可以使用以下方法。请阅读有关 apply() 的说明。

    def SalaryCheck(Salary):
        if Salary > 50000:
            print('Over £50,000')
        else:
            print('Under £50,000') 
    
    lst = ['Geeks', 'For', 'Geeks', 'is', 'portal', 'for', 'Geeks']
    lst2 = [110000, 220000, 3300, 440000, 55, 66, 77000]
    
    
    df = pd.DataFrame(list(zip(lst, lst2)),
                      columns=['Name', 'Salary']) 
    df['Salary'].apply(SalaryCheck)[0]
    

    【讨论】:

      猜你喜欢
      • 2023-03-09
      • 2014-06-08
      • 1970-01-01
      • 1970-01-01
      • 2020-03-29
      • 2020-04-30
      • 2020-12-31
      • 2021-02-03
      相关资源
      最近更新 更多