基于列值 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
我有 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