通过if语句为每行分配标签

时间:2018-12-19 15:26:51

标签: python python-3.x windows row

我得到了以下数组:

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']]

我该怎么做?

1 个答案:

答案 0 :(得分:1)

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