我想根据数字所在的范围返回一个值(1、2、3、4或5).我想定义一个函数,并使用.apply()将该函数应用于DataFrame中的列.

在下面的代码中,amount是DataFrame中的假设列.但是,我在第elif >= 40 amount < 60:行得到了错误SyntaxError: invalid syntax(我相信它将在所有其他行上引发相同的错误).

amount = pd.Series([20, 25, 65, 80])

def miles(amount):
    if 20 >= amount < 40:
        return 1
    elif >= 40 amount < 60:
        return 2
    elif >= 60 amount < 80:
        return 3
    elif >= 80 amount < 100:
        return 4
    elif >= 100 amount < 120:
        return 5
    else:
        pass

如有任何帮助,我们不胜感激.谢谢!

推荐答案

对于这种特定情况,您将离散的固定宽度整数范围映射到一个数字.这可以使用线性变换来解决.本例中的偏移量为0.

amount = pd.Series([20, 25, 65, 80])
out = amount.divide(20).astype(int)
out
# returns:
0   1
1   1
2   3
3   4
dtype: int32

对于不是固定宽度的更一般情况,可以使用pd.cut.

pd.cut(ammount, [20, 40, 60, 80, 100, 120], right=False, labels=[1,2,3,4,5]).astype(int)
# returns:
0   1
1   1
2   3
3   4
dtype: int32

Python相关问答推荐

如何在具有重复数据的pandas中对groupby进行总和,同时保留其他列

我在使用fill_between()将最大和最小带应用到我的图表中时遇到问题

使用新的类型语法正确注释ParamSecdecorator (3.12)

根据在同一数据框中的查找向数据框添加值

为什么我的Python代码在if-else声明中的行之前执行if-else声明中的行?

_repr_html_实现自定义__getattr_时未显示

如何从.cgi网站刮一张表到rame?

通过pandas向每个非空单元格添加子字符串

当独立的网络调用不应该互相阻塞时,'

在pandas中使用group_by,但有条件

Pandas GroupBy可以分成两个盒子吗?

Django admin Csrf令牌未设置

lityter不让我输入左边的方括号,'

基于形状而非距离的两个numpy数组相似性

如何检测鼠标/键盘的空闲时间,而不是其他输入设备?

比Pandas 更好的 Select

将一个双框爆炸到另一个双框的范围内

我对这个简单的异步者的例子有什么错误的理解吗?

Python OPCUA,modbus通信代码运行3小时后出现RuntimeError

更新包含整数范围的列表中的第一个元素