首页 > 解决方案 > 通过 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']]

我怎样才能做到这一点?

标签: pythonpython-3.xwindowsrow

解决方案


您可以将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']]

推荐阅读