对掩码的数组求和

时间:2015-11-24 17:02:44

标签: python pandas stacked-chart

我有一个df [n,f],例如,n行x 35个特征。每行中所有要素的总和为= 1.0。我试图通过将不超过某个最小平均值的所有特征分组到一个类别"所有其他特征来创建堆积条形图。"我试图用一个面具来完成这个。例如,如果我设置了5%的阈值:

[In]
mask = (df.sum(axis = 0) > num_selected * 0.05).values
mask

[Out]
array([False, False,  True,  True, False, False, False, False, False,
   False, False,  True, False, False, False, False, False, False,
    True,  True, False, False, False, False,  True, False, False,
   False, False, False, False, False, False, False, False], dtype=bool)

我的问题是:给定这个面具,我如何将所有不符合标准的功能(例如,' false')分组到"所有其他"并用它来创建一个堆积的条形图与其他所有' True'特征?

2 个答案:

答案 0 :(得分:1)

由于您使用的是NumPy ndarray,您可以使用花哨的索引方法,即

import numpy as np

df = np.random.randint(0,100,size=(10,35))
mask = df.sum(axis=0) > 500

trueFeatures = df[:,~mask]
allOthers = df[:,mask]

print mask
print trueFeatures
print allOthers

给出以下输出:

[ True False  True  True  True False False  True False False False False
 False  True  True False False False  True  True False  True False  True
  True False  True  True False False  True  True  True  True  True]
[[39 52 37 70 50 43 94 13 88  2 20 52 26  0 31 38]
 [40 25  9 26 64 34 22 35  0 28 15 60 49 58 74 99]
 [84 24  4 46 26 42 60 39 54 46 85 87 37 72 22 54]
 [59 34 47 29 20 91 11 36 39 43 72 76 46 47 51 36]
 [38 82 30 39 54 21 19 35 61 80 69 38 25 97 36 77]
 [15 50 43  3  1  3 75 36  1 40 46 19 61 24 40 34]
 [47 92 70 23 37  1  3 95 34 93 10 23 11 14 68  2]
 [70  2 60 94 63 92 34  6 15 71  2 30 82 59 63  5]
 [94 33 77 86 12  4 69  9 31 42 30 23 35 17  8  5]
 [ 4 75 19 73 27 79 87 69 59 55 54 71 31 50 54 86]]
[[83 11 19 58 20 41 71 36 73 91 91 30 60 48 83 30 78 27 86]
 [46 67 81 62 75 88 71 33 23 71 79 52 18 33 72 89 54 50 99]
 [80  4 59 82 45 99 71 38 99 83 36 51  3 88 84 87 69 55 50]
 [62 34 53 77  3 79 74 27 77 28 85 82 87 13 96 60 69 13 99]
 [90 83 51 10 94 14 31 45  9 98 43 40 66 92 13  3 52 76 55]
 [99 73 50 97 41 34 90 63 97 73 58 14 92 25 94 43 74 71 65]
 [ 8  5 33 86 98 96 81 94 84 65 32 18 47 48 64 17 74 53 68]
 [18 84 50  9 61 55 65 72 26 37 24 91 87 81 97  1 36 38 93]
 [45 97 96 76 18  5  1 95 32 33 40 86 39 37 41 80  2 74 80]
 [64 75 10 63 96 44 44 86 32 99 53 57 91 37 87 91 65 64 62]]

在我对问题的理解中,回答了你的问题:)

答案 1 :(得分:0)

Le Petit Prince""帮我解决了这个问题。将它发布给那些可能想要让它变得更加“pythoneseque”的人。'特别是,我注意到我可能会改进选择列表项的方法。注意df ["资产类型"]是一个用作标签的功能。

JTextField