Predict为每列返回一个numpy数组(仅由0和1组成)。
如何打印具有1的列的名称而不显示具有0的列?
predict
[[0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]]
我有一个列名列表-columns_names
:
['1','10','11','12','13','14','15','16','17','18','19','2 ','20','21','22','23','24','25','26','27','28','29','3','30', '31','32','33','34','4','5','6','7','8','9']
type(predict) - numpy.ndarray
type(columns_names) - list
答案 0 :(得分:2)
您可以使用pandas数据框来帮助标记numpy矩阵。
import pandas as pd
predict = [[0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]]
columns_names = ['1', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '2', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '3', '30', '31', '32', '33', '34', '4', '5', '6', '7', '8', '9']
df = pd.DataFrame(predict, columns=columns_names)
df.columns[df.any()].tolist()
输出:
['15', '17', '24', '6']
您可以使用
df.apply(lambda x: df.columns[x.eq(1)].tolist(), axis=1).tolist()
输出:
[['17', '24'], ['6'], ['15', '24']]
答案 1 :(得分:1)
您可以通过简单的列表理解来做到这一点,而无需导入任何外部模块。
list(i for i,j in zip(columns_names, predict) if j)
这是一个称为“遮罩”的概念。您可以在这篇文章中了解更多相关信息:Python: Elegant and efficient ways to mask a list