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:你必须提供一个' by'和'等级'
如何解决这个问题?预期产出是:
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
答案 0 :(得分:3)
如果Series
为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
,我认为您可以使用DataFrame.sort_values
:
by
如果需要groupby
,请使用参数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
为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
,请使用Kartik solution
:
level
如果需要groupby
,请使用参数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
,但第一种解决方案更好,因为更通用:
ref.updateAndGet(t => x::t)
答案 1 :(得分: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