如何按类标签或任何特定列

时间:2016-09-23 06:16:50

标签: python sorting pandas dataframe group-by

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

2 个答案:

答案 0 :(得分:3)

如果Seriesprint (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

如果indexprint (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