我有一个看起来像这样的numpy数组:
+----+-------+----------------+
| id | class | probability |
+----+-------+----------------+
| 0 | 0 | 0.371301944865 |
| 0 | 1 | 0.317619162391 |
| 0 | -1 | 0.311078922721 |
| 1 | 0 | 0.401434454687 |
| 1 | 1 | 0.316000976419 |
| 1 | -1 | 0.282564557522 |
| 2 | 1 | 0.361490456577 |
| 2 | 0 | 0.324832048066 |
| 2 | -1 | 0.313677512904 |
| . | . | . |
| . | . | . |
| . | . | . |
+----+-------+----------------+
或更正式:
x = numpy.array([[ 0.00000000e+00, 0.00000000e+00, 3.71301945e-01],
[ 0.00000000e+00, 1.00000000e+00, 3.17619162e-01],
[ 0.00000000e+00, -1.00000000e+00, 3.11078923e-01],
[ 1.00000000e+00, 0.00000000e+00, 4.01434455e-01],
[ 1.00000000e+00, 1.00000000e+00, 3.16000976e-01],
[ 1.00000000e+00, -1.00000000e+00, 2.82564558e-01],
[ 2.00000000e+00, 1.00000000e+00, 3.61490457e-01],
[ 2.00000000e+00, 0.00000000e+00, 3.24832048e-01],
[ 2.00000000e+00, -1.00000000e+00, 3.13677513e-01]])
正如您所看到的,对于每个id,我有三个类,每个类都有其概率。我想将其转换为这样的四列数组:
id/class -1 0 1
0 0.311078922721 0.371301944865 0.317619162391
1 0.282564557522 0.401434454687 0.316000976419
. . . .
. . . .
. . . .
有快速/干净的方法吗?!
答案 0 :(得分:3)
以下是pandas的解决方案:
class -1 0 1
id
0 0.311079 0.371302 0.317619
1 0.282565 0.401434 0.316001
2 0.313678 0.324832 0.361490
输出:
<MenuItem Header="My Items" ItemsSource="{Binding Path=MyMenuItems}" Click="MenuItem_Click">
<MenuItem.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="CommandParameter" Value="{Binding}" />
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>
答案 1 :(得分:1)
将id与数据连接起来:np.hstack((a[:,0][::3][:,None],a[:,2].reshape(-1,3)))
例如:
a=np.array([[i//3,i%3-1,np.random.random()] for i in range (15)])
# a=a[np.argsort(a[:,1])][np.argsort(a[:,0])] #if not sorted
print(a)
id=a[::3,0][:,None]
data =a[:,2].reshape(-1,3)
print(np.hstack((id,data)))
给出
[[ 0. -1. 0.78556868]
[ 0. 0. 0.29483601]
[ 0. 1. 0.74003482]
[ 1. -1. 0.00673232]
[ 1. 0. 0.43262104]
[ 1. 1. 0.92925208]
[ 2. -1. 0.26060377]
[ 2. 0. 0.21186242]
[ 2. 1. 0.88388227]
[ 3. -1. 0.53816376]
[ 3. 0. 0.82545746]
[ 3. 1. 0.53964188]
[ 4. -1. 0.63082784]
[ 4. 0. 0.45693351]
[ 4. 1. 0.38970428]]
[[ 0. 0.78556868 0.29483601 0.74003482]
[ 1. 0.00673232 0.43262104 0.92925208]
[ 2. 0.26060377 0.21186242 0.88388227]
[ 3. 0.53816376 0.82545746 0.53964188]
[ 4. 0.63082784 0.45693351 0.38970428]]
pandas也可以为你提供很好的解决方案。
答案 2 :(得分:0)
您还可以使用pandas
unstack
使用相同的df @HYRY,添加:
df.set_index(["id","class"]).unstack("class").reset_index()
结果:
id p
class -1.0 0.0 1.0
0 0 0.311079 0.371302 0.317619
1 1 0.282565 0.401434 0.316001
2 2 0.313678 0.324832 0.361490