2016-04-01 25 views
0

私は配列をソートしようとしています。配列のソートと切り捨て/切り捨て

x y z 
1 3 83 
2 4 38 
8 1 98 
3 87 93 
4 1 73 
1 3 67 
9 9 18 
1 4 83 
9 3 93 
8 2 47 

を、私はそれが最初に次のようになりたい::だから

x y z 
1 3 83 
1 3 67 
1 4 83 
2 4 38 
3 87 93 
4 1 73 
8 1 98 
8 2 47 
9 9 18 
9 3 93 

x

は私がインポートされます。このようなデータファイルを持っています列が昇順になり、その後にy列が続きます。

最後に、これらのアレイからアレイを構築したいのですか?それをしてもいいですか?

だから私は持っている:...

array[0] = [[1, 3, 83],[1, 3, 67],[1, 4, 83]] 
array[1] = [[2, 4, 38]] 
array[2] = [[3, 87, 93]] 
array[3] = [[4, 1, 73]] 
array[4] = [[8, 1, 98],[8,2,47]] 

などアウトの開始:

import numpy as np 
import matplotlib.pyplot as plt 

data_file_name = 'whatever.dat' 

data=np.loadtxt(data_file_name) 
+0

実装の試行で発生した問題を解決するために[mcve]を提供してください。 – idjaw

+0

あなたはPandasパッケージを使いたいですか、純粋なPythonソリューションが必要ですか? – Alexander

+0

純粋なpythonが最高でしょう - あなたに親切に感謝します – Scientized

答えて

1

ここにはnum PY溶液(あなたがデータをロードするために使用されると仮定):

import numpy as np 

data_file_name = 'whatever.dat' 
data = np.loadtxt(data_file_name, 
        skiprows=1, 
        dtype=[('x', float), ('y', float), ('z', float)]) 

data.sort(axis=0, order=['x', 'y', 'z']) 

unique_x_col_vals = set(row[0] for row in data) 
array = {n: [list(row) for row in data if row[0] == val] 
      for n, val in enumerate(unique_x_col_vals)} 

>>> array 
{0: [[1.0, 3.0, 67.0], [1.0, 3.0, 83.0], [1.0, 4.0, 83.0]], 
1: [[2.0, 4.0, 38.0]], 
2: [[3.0, 87.0, 93.0]], 
3: [[4.0, 1.0, 73.0]], 
4: [[8.0, 1.0, 98.0], [8.0, 2.0, 47.0]], 
5: [[9.0, 3.0, 93.0], [9.0, 9.0, 18.0]]} 

それは内部カラムxに基づいて一意の値の各行を抽出するリスト内包を使用して、アレイを生成するために辞書理解を使用します。

データの読み込み時に浮動小数点数を使用しましたが、データが一致する場合はintを指定することもできます。

0

あなたは、コードだけのカップルラインで、このためにパンダを使用することができます。

df = pd.read_csv(txt, sep=r"\s*") 
print df.sort(['x','y'], ascending=[True,True]) 
+0

純粋なpythonの解決策は、この特定のケースで私にとっては良いでしょう – Scientized