teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

補足を追加

2020/09/25 22:56

投稿

Daregada
Daregada

スコア11990

answer CHANGED
@@ -1,3 +1,5 @@
1
+ `numpy.argsort`を使う。
2
+
1
3
  ```Python
2
4
  import numpy as np
3
5
 
@@ -10,4 +12,50 @@
10
12
 
11
13
  arr1 = arr[np.argsort(arr[:, 0])]
12
14
  print(arr1)
15
+ ```
16
+
17
+ ```result
18
+ [[5 1]
19
+ [3 4]
20
+ [4 8]]
21
+ 基準となる列のndarray: [5 3 4]
22
+ その列で昇順ソートした場合のインデックス: [1 2 0]
23
+ [[3 4]
24
+ [4 8]
25
+ [5 1]]
26
+ ```
27
+
28
+ 面倒くさいなら、いったんpandasに変換してソートしてからndarrayに戻す。
29
+
30
+ ```Python
31
+ import numpy as np
32
+ import pandas as pd
33
+
34
+ arr = np.array([[5, 1], [3, 4], [4, 8]])
35
+ print(arr)
36
+
37
+ df = pd.DataFrame(arr)
38
+ print(df)
39
+ df.sort_values(0, inplace=True)
40
+ print(df)
41
+
42
+ arr1 = df.values
43
+ print(arr1)
44
+ ```
45
+
46
+ ```result
47
+ [[5 1]
48
+ [3 4]
49
+ [4 8]]
50
+ 0 1
51
+ 0 5 1
52
+ 1 3 4
53
+ 2 4 8
54
+ 0 1
55
+ 1 3 4
56
+ 2 4 8
57
+ 0 5 1
58
+ [[3 4]
59
+ [4 8]
60
+ [5 1]]
13
61
  ```