在用户定义的函数中应用函数进行四舍五入

2024-09-30 05:16:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图对满足条件的数字进行取整,并对满足不同条件的数字进行取整。我编写了下面的函数来实现这一点,但它似乎有问题

Range   New Range     I/D         Expected output
1         1.1         Increase       2
1         1.4         Increase       2
1         .7          Decrease       0
1         .9          Decrease       0
3         2.2         No Change      2
5         4.8         No Change      5

基本上,如果有要增加的标志,则应用函数进行取整;“减少”标志意味着应用函数进行向下取整;没有哪面旗帜会是一个基本的结束语

def inc(row):
    if row['increae']=='increase':
        val= row['Final New Range'].apply(np.ceil)
    elif row['increae']=='increase':
        val= row['Final New Range'].apply(np.ceil)
    else:
        val='None'
    return val

回溯

<ipython-input-35-8f7b70f1c7f8> in inc(row)
     17 def inc(row):
     18     if row['increae']=='increase':
---> 19         val= row['Final New Range'].apply(np.ceil)
     20     elif row['increae']=='increase':
     21         val= row['Final New Range'].apply(np.ceil)

AttributeError: 'float' object has no attribute 'apply'

Tags: 函数newnprange数字valfinalinc
1条回答
网友
1楼 · 发布于 2024-09-30 05:16:31

您想要的函数如下所示:

def inc(row):
    if row['increae']=='Increase':
        return int( np.ceil(row["New Range"]) )
    elif row['increae']=='Decrease':
        return int( np.floor(row["New Range"]) )
    else:
        return int( np.round(row["New Range"]) )

运行这段代码以测试它:

import pandas as pd
import numpy as np


def inc(row):
    if row['increae']=='Increase':
        return int( np.ceil(row["New Range"]) )
    elif row['increae']=='Decrease':
        return int( np.floor(row["New Range"]) )
    else:
        return int( np.round(row["New Range"]) )

# Example of use

# Sample data frame
df = pd.DataFrame([[1, 1.1, "Increase"], 
                   [1, 1.4, "Increase"],
                   [1, 0.7, "Decrease"],
                   [1, 0.9, "Decrease"],
                   [3, 2.2, "No Change"],
                   [5, 4.8, "No Change"],
                   ]
                  , columns=['Range', 'New Range', 'increae']) # column names

# Iterating through the rows
for index, row in df.iterrows():   
    print(row[0], row[1], row[2], " > output", inc(row) )

inc(row)获取每行的结果

运行以下命令的输出:

1 1.1 Increase  > output 2
1 1.4 Increase  > output 2
1 0.7 Decrease  > output 0
1 0.9 Decrease  > output 0
3 2.2 No Change  > output 2
5 4.8 No Change  > output 5

如果您更改原始数据帧中任何内容的列名,这应该对您有用

相关问题 更多 >

    热门问题