[英]How to sort/ group a Pandas data frame by class label or any specific column
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
標簽的升序對這些數據進行排序?
我試過了:
df.groupby([column_name_lst])["class"]
但是它失敗並顯示以下錯誤:
TypeError:您必須提供“按”和“級別”之一
如何解決這個問題呢? 預期輸出為:
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
我認為如果class
是Series
則可以使用DataFrame.sort_values
:
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
如果class
是index
,請使用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
如果您從問題中的數據開始:
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()
應該給你答案。 如果是專欄,請通過@jezarael回答
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.