2017-01-26 4 views
1

私は次のようにテーブルをグループ化しています。(['CPUCore', Offline_RetetionAge']のままにしておく必要があります)の中でindexでソートしたいのですがどうすればいいですか?私は何を意味することは、このだと思うグループのキー内でソートする

enter image description here

答えて

1

は明らかにstring何であるか、objectので、sort_indexそれは英数字のソート:

df = pd.DataFrame({'CPUCore':[2,2,2,3,3], 
        'Offline_RetetionAge':['100','1','12','120','15'], 
        'index':[11,16,5,4,3]}).set_index(['CPUCore','Offline_RetetionAge']) 

print (df) 
          index 
CPUCore Offline_RetetionAge  
2  100      11 
     1      16 
     12      5 
3  120      4 
     15      3 
print (df.index.get_level_values('Offline_RetetionAge').dtype) 
object 


print (df.sort_index()) 
          index 
CPUCore Offline_RetetionAge  
2  1      16 
     100      11 
     12      5 
3  120      4 
     15      3 

#change multiindex - cast level Offline_RetetionAge to int 
new_index = list(zip(df.index.get_level_values('CPUCore'), 
        df.index.get_level_values('Offline_RetetionAge').astype(int))) 
df.index = pd.MultiIndex.from_tuples(new_index, names = df.index.names) 


print (df.sort_index()) 
          index 
CPUCore Offline_RetetionAge  
2  1      16 
     12      5 
     100      11 
3  15      3 
     120      4 
0コメントによる

EDIT:

print (df.reset_index() 
     .sort_values(['CPUCore','index']) 
     .set_index(['CPUCore','Offline_RetetionAge'])) 
          index 
CPUCore Offline_RetetionAge  
2  12      5 
     100      11 
     1      16 
3  15      3 
     120      4 
+0

感謝こんにちは、インデックスではなく、 "index column"でソートしたい場合は、 – sweetyBaby

+1

であるので、 'print(df.reset_index()。sort_values(['CPUCore'、 'index'])が必要です。set_index(['CPUCore'、 'Offline_RetetionAge '])) '? – jezrael

+0

ああ、あなたはそれを爪: – sweetyBaby

1

:パンダからPD として 輸入パンダは、シリーズをインポートし、データフレーム

# create what I believe you tried to ask 
df = DataFrame(\ 
    [[11,'reproducible'], [16, 'example'], [5, 'a'], [4, 'create'], [9,'!']]) 
df.columns = ['index', 'bla'] 
df.index = pd.MultiIndex.from_arrays([[2]*4+[3],[10,100,1000,11,512]], \ 
            names=['CPUCore', 'Offline_RetentionAge']) 

# sort by values and afterwards by index where sort_remaining=False preserves 
# the order of index 
df = df.sort_values('index').sort_index(level=0, sort_remaining=False) 

print df 

声明sort_valuesはインデックスで値をソートし、sort_indexは、グループ化を復元複数の行のインデックスの順番を変更することなく、マルチインデックスで同じCPUCoreを使用します。

私は "テーブルごとのグループ"とは何か分かりません。 pd.GroupByオブジェクトがある場合、そのようなsort_values()を使用することはできません。 あなたは何GROUP BYまたはfunctools.partialDataFrame.apply

出力を使用再考する必要がある場合があります:使用している場合は、私はあなたの第二のレベルの問題dtypeがあると思い

       index   bla 
CPUCore Offline_RetentionAge      
2  11      4  create 
     1000      5    a 
     10      11 reproducible 
     100      16  example 
3  512      9    ! 
+0

おかげで、私はここにフォローアップの質問があります:http://stackoverflow.com/questions/41868845/selecting-top-3-elements-within-groupby – sweetyBaby

関連する問題