python - 通过 if 语句为每行分配标签
问题描述
我得到以下数组:
array([['A', 0.05],
['B', 0.09],
['C', 0.13]]
我想创建一个新列并根据第二列为项目 A、B 和 C 分配一个标签。如果项目高于 0.10,则必须获得标签“2”。如果低于 0.10,则必须获得标签“1”。所以我想要的输出是:
array([['A', 0.05,'1'],
['B', 0.09,'1'],
['C', 0.13,'2']]
我怎样才能做到这一点?
解决方案
您可以将numpy.where与 numpy.column_stack 结合使用:
import numpy as np
arr = np.array([['A', 0.05],
['B', 0.09],
['C', 0.13]])
col = np.where(arr[:, 1].astype(np.float) > 0.10, '2', '1')
arr = np.column_stack((arr, col))
print(arr)
输出
[['A' '0.05' '1']
['B' '0.09' '1']
['C' '0.13' '2']]
更新
如果您有两个以上的标签,则可以执行以下操作:
import numpy as np
arr = np.array([['A', 0.05],
['B', 0.09],
['C', 0.13]])
def calc(x):
if x < 0.08:
return '1'
elif 0.08 <= x < 0.10:
return '2'
elif 0.10 < x:
return '3'
col = np.array([calc(e) for e in arr[:, 1].astype(np.float)])
arr = np.column_stack((arr, col))
print(arr)
输出
[['A' '0.05' '1']
['B' '0.09' '2']
['C' '0.13' '3']]
推荐阅读
- android - 使用 Firebase InstanceID 和 RxJava 2.0 的异常 (MAIN_THREAD)
- django - 如何在包含大型数据集的 django 中实现快速搜索(2-3 秒)?
- reactjs - Antd:带有侧边子菜单的sidemenu
- jquery - 除第 1 页外,JS 代码未在 DataTable 中调用
- asp.net - 在我们使用 devexpress 控件的窗口窗体中,是否可以根据屏幕分辨率调整窗体和布局的大小
- centos7 - 我正在尝试在 centos 7 上远程挂载文件系统
- asp.net - 在不登录用户的情况下更新 AWS Cognito 用户的自定义属性
- reactjs - 如何通过在 StencilJS 中滚动到顶部来在加载内容时保持滚动位置?
- css - 在 Chrome 中组合过滤器和 :hover 时出现奇怪的行为
- javascript - (Fullcalendar 4 VueJS) - 从 AM/PM 到 24H 的行时间格式