2016-10-11 11 views
1

Iは、次のデータフレームを有する:ソートデータ - パンダDATAFRAME

 As Comb  Mu(+) Name  Zone  f´c 
33 0.37 2 6.408225 Beam_13 Final 30.0 
29 0.37 2 6.408225 Beam_13 Begin 30.0 
31 0.94 2 16.408225 Beam_13 Middle 30.0 
15 0.54 2 9.504839 Beam_7 Final 30.0 
11 0.54 2 9.504839 Beam_7 Begin 30.0 
13 1.12 2 19.504839 Beam_7 Middle 30.0 

Iは、以下の期待される出力に示すように、グループ内Zoneによってその後Nameによって、データをソートし、必要がある:

 As Comb  Mu(+) Name  Zone  f´c 
11 0.54 2 9.504839 Beam_7 Begin 30.0 
13 1.12 2 19.504839 Beam_7 Middle 30.0 
15 0.54 2 9.504839 Beam_7 Final 30.0 
29 0.37 2 6.408225 Beam_13 Begin 30.0 
31 0.94 2 16.408225 Beam_13 Middle 30.0 
33 0.37 2 6.408225 Beam_13 Final 30.0 

インデックスで注文できますが、Nameグループ内の名前とゾーンでは注文できません。何か案は?

答えて

3

NameZoneの列をカテゴリの種類に変換し、カテゴリと順序を指定するのが一番きれいです。ここで

from io import StringIO 

data = """ 
As,Comb,Mu(+),Name,Zone,f´c 
33,0.37,2,6.408225,Beam_13,Final,30.0 
29,0.37,2,6.408225,Beam_13,Begin,30.0 
31,0.94,2,16.408225,Beam_13,Middle,30.0 
15,0.54,2,9.504839,Beam_7,Final,30.0 
11,0.54,2,9.504839,Beam_7,Begin,30.0 
13,1.12,2,19.504839,Beam_7,Middle,30.0 
""" 

df = pd.read_csv(StringIO(data)) 

# convert Name and Zone to ordinal/category type 
df.Name = df.Name.astype('category', categories=["Beam_7", "Beam_13"], ordered=True) 
df.Zone = df.Zone.astype('category', categories=["Begin", "Middle", "Final"], ordered=True) 

df.sort_values(by=['Name', 'Zone']) 

は出力です:

enter image description here

その他のオプションはhere

+0

感謝を見つけることができます!素晴らしい仕事! – Eduardo

+0

別の質問:カテゴリーとしてPandas列を置くことは可能ですか?私はそのような "ビーム"のリストを持っています。 – Eduardo

+0

あなたは何を意味するのか分かりません。上記のメソッドは列をカテゴリ型に変換します。多分別の質問を作成することを検討してください。また、パンダのドキュメント[ここ](http://pandas.pydata.org/pandas-docs/stable/categorical.html) – shawnheide