2016-09-23 69 views
3
class col2 col3 col4 col5 
1  4 5 5 5 
4  4 4.5 5.5 6 
1  3.5 5 6 4.5 
3  3 4 4 4 
2  3 3.5 3.8 6.1 

我在示例中使用了假設數據。真正的DataFrame的形狀是6680x1900。我已將這些數據聚類爲50標記的類(1至50)。我怎樣才能按class標籤的升序對這些數據進行排序?如何按類標籤或任何特定列對Pandas數據框進行排序/分組

我曾嘗試:

df.groupby([column_name_lst])["class"] 

但它失敗,此錯誤:

TypeError: You have to supply one of 'by' and 'level'

如何解決這個問題呢?預期成果是:

class col2 col3 col4 col5 
1  4 5 5 5 
1  3.5 5 6 4.5 
2  3 3.5 3.8 6.1 
3  3 4 4 4 
4  4 4.5 5.5 6 

回答

2

我認爲你可以使用DataFrame.sort_values如果classSeries

print (type(df['class'])) 
<class 'pandas.core.series.Series'> 


print (df.sort_values(by='class')) 
    class col2 col3 col4 col5 
0  1 4.0 5.0 5.0 5.0 
2  1 3.5 5.0 6.0 4.5 
4  2 3.0 3.5 3.8 6.1 
3  3 3.0 4.0 4.0 4.0 
1  4 4.0 4.5 5.5 6.0 

此外,如果需要groupby,使用參數by

print (df.groupby(by='class').sum()) 
     col2 col3 col4 col5 
class       
1  7.5 10.0 11.0 9.5 
2  3.0 3.5 3.8 6.1 
3  3.0 4.0 4.0 4.0 
4  4.0 4.5 5.5 6.0 

如果classindex,使用Kartik solution

print (df.index) 
Int64Index([1, 4, 1, 3, 2], dtype='int64', name='class') 

print (df.sort_index()) 
     col2 col3 col4 col5 
class       
1  4.0 5.0 5.0 5.0 
1  3.5 5.0 6.0 4.5 
2  3.0 3.5 3.8 6.1 
3  3.0 4.0 4.0 4.0 
4  4.0 4.5 5.5 6.0 

此外,如果需要groupby,使用參數level

print (df.groupby(level='class').sum()) 
     col2 col3 col4 col5 
class       
1  7.5 10.0 11.0 9.5 
2  3.0 3.5 3.8 6.1 
3  3.0 4.0 4.0 4.0 
4  4.0 4.5 5.5 6.0 

index,但第一個解決方案是更好,因爲它更普遍:

print (df.groupby(df.index).sum()) 
     col2 col3 col4 col5 
class       
1  7.5 10.0 11.0 9.5 
2  3.0 3.5 3.8 6.1 
3  3.0 4.0 4.0 4.0 
4  4.0 4.5 5.5 6.0 
+0

df.sort_values(by ='class')這個工作完美。謝謝 – jax

+0

很高興能幫助你。美好的一天! – jezrael

0

如果你開始在你的問題中的數據:

class col2 col3 col4 col5 
1  4 5 5 5 
4  4 4.5 5.5 6 
1  3.5 5 6 4.5 
3  3 4 4  4 
2  3 3.5 3.8 6.1 

並且想對此進行排序,那麼它取決於'class'是否是索引或列。如果指數:

df.sort_index() 

應該給你答案。如果列,按照answer by @jezarael

相關問題