基于列值 0 或 1 的行的平均值

mean of rows based on column value 0 or 1

我有 2 个 numpy 数组,一维和多维,如下所示。我已将一维数组组合到另一个数组中。我正在尝试查找此数组中最后一列值分别为 1 和 0 的值的平均值。

数组 1:

a = np.array([[  1. ,  85. ,  66. ,  29. ,   0. ,  26.6,   0.4,  31. ],
              [  8. , 183. ,  64. ,   0. ,   0. ,  23.3,   0.7,  32. ],
              [  1. ,  89. ,  66. ,  23. ,  94. ,  28.1,   0.2,  21. ],
              [  0. , 137. ,  40. ,  35. , 168. ,  43.1,   2.3,  33. ],
              [  5. , 116. ,  74. ,   0. ,   0. ,  25.6,   0.2,  30. ]])

数组 2:

b = np.array([0, 1, 0, 1, 0])

最终均值数组:

([[  2.33,   4.  ],
 [ 96.67, 160.  ],
 [ 68.67,  52.  ],
 [ 17.33,  17.5 ],
 [ 31.33,  84.  ],
 [ 26.77,  33.2 ],
 [  0.27,   1.5 ],
 [ 27.33,  32.5 ]]))

这是我目前所拥有的:

train_labels = b.reshape(5, 1)
temp = np.hstack((a,train_labels))

转换为pandasdataframe,可以按b分组取平均值。

df = pd.DataFrame(a)
obj_b = pd.Series(b)
df.groupby(obj_b).mean().T.values

    array([[  2.33333333,   4.        ],
           [ 96.66666667, 160.        ],
           [ 68.66666667,  52.        ],
           [ 17.33333333,  17.5       ],
           [ 31.33333333,  84.        ],
           [ 26.76666667,  33.2       ],
           [  0.26666667,   1.5       ],
           [ 27.33333333,  32.5       ]])

df['tag'] = b
df
         0      1     2     3      4     5    6     7  tag
    0  1.0   85.0  66.0  29.0    0.0  26.6  0.4  31.0    0
    1  8.0  183.0  64.0   0.0    0.0  23.3  0.7  32.0    1
    2  1.0   89.0  66.0  23.0   94.0  28.1  0.2  21.0    0
    3  0.0  137.0  40.0  35.0  168.0  43.1  2.3  33.0    1
    4  5.0  116.0  74.0   0.0    0.0  25.6  0.2  30.0    0

print(df.groupby('tag').mean().T)

tag          0      1
0     2.333333    4.0
1    96.666667  160.0
2    68.666667   52.0
3    17.333333   17.5
4    31.333333   84.0
5    26.766667   33.2
6     0.266667    1.5
7    27.333333   32.5