In [97]: import pandas as pd
In [98]: df = pd.DataFrame({'name':['A','B','C','A','B','C','A','B','C'],'Year':[2003,2002,2001,2003,2002,2001,2003,2002,2001]})
#### Default groupby operation:
In [99]: for each in df.groupby(["Year"]): print each
(2001, Year name
2 2001 C
5 2001 C
8 2001 C)
(2002, Year name
1 2002 B
4 2002 B
7 2002 B)
(2003, Year name
0 2003 A
3 2003 A
6 2003 A)
### order preserved:
In [100]: for each in df.groupby(["Year"], sort=False): print each
(2003, Year name
0 2003 A
3 2003 A
6 2003 A)
(2002, Year name
1 2002 B
4 2002 B
7 2002 B)
(2001, Year name
2 2001 C
5 2001 C
8 2001 C)
In [106]: df.groupby(["Year"], sort=False).apply(lambda x: x.sort_values(["Year"]))
Out[106]:
Year name
Year
2003 0 2003 A
3 2003 A
6 2003 A
2002 1 2002 B
4 2002 B
7 2002 B
2001 2 2001 C
5 2001 C
8 2001 C
In [107]: df.groupby(["Year"], sort=False).apply(lambda x: x.sort_values(["Year"])).reset_index(drop=True)
Out[107]:
Year name
0 2003 A
1 2003 A
2 2003 A
3 2002 B
4 2002 B
5 2002 B
6 2001 C
7 2001 C
8 2001 C
这种操作在分层索引中有介绍。Check out the examples here 当你groupby的时候,你正在创建新的索引。如果你也通过.agg()传递一个列表,你会得到多个列。我试图弄清楚这一点,并通过谷歌找到了这个线程。 结果是,如果你传递一个对应于你想要排序的列的元组。 试试这个:
# generate toy data
ex = pd.DataFrame(np.random.randint(1,10,size=(100,3)), columns=['features', 'AUC', 'recall'])
# pass a tuple corresponding to which specific col you want sorted. In this case, 'mean' or 'AUC' alone are not unique.
ex.groupby('features').agg(['mean','std']).sort_values(('AUC', 'mean'))
8条答案
按热度按时间ecbunoof1#
执行groupby操作,然后使用reset_index()将其返回到DataFrame中,然后进行排序。
mwecs4sa2#
从Pandas 0.18开始,一种方法是使用分组数据的
sort_index
方法。下面是一个例子:
正如您所看到的,groupby列现在是降序排序的,而不是默认的升序。
xlpyo6sf3#
类似于上面的答案之一,但尝试将
.sort_values()
添加到.groupby()
将允许您更改排序顺序。如果您需要对单个列进行排序,它看起来像这样:ascending=False
将从高到低排序,默认为从低到高排序。What is the difference between size and count in pandas?
efzxgjgh4#
保持顺序或按降序排序的其他示例:
bqujaahr5#
你可以在执行groupby之前在dataframe上执行
sort_values()
。Pandas保留了groupby中的顺序。puruo6ea6#
这种操作在分层索引中有介绍。Check out the examples here
当你groupby的时候,你正在创建新的索引。如果你也通过.agg()传递一个列表,你会得到多个列。我试图弄清楚这一点,并通过谷歌找到了这个线程。
结果是,如果你传递一个对应于你想要排序的列的元组。
试试这个:
这将输出仅按AUC均值列排序的df。
kuhbmx9i7#
在'sort_values'子句中使用'by'参数一般示例-'Customer Name'和'Profit'是列
4dc9hkyq8#
根据您的需求,最简单的解决方案可能是: