如何按一个列进行分组并对另一个列的值进行排序?

12

这是我的数据框

import pandas as pd
df = pd.DataFrame({'A': ['one', 'one', 'two', 'two', 'one'] ,
                   'B': ['Ar', 'Br', 'Cr', 'Ar','Ar'] ,
                   'C': ['12/15/2011', '11/11/2001', '08/30/2015', '07/3/1999','03/03/2000' ],
                      'D':[1,7,3,4,5]})

我的目标是按列A进行分组,并在分组结果内按列B进行排序。

这就是我想出来的:

sort_group = df.sort_values('B').groupby('A')

我本希望分组操作不会扭曲顺序,但事实并非如此。此外,它返回的不是数据框而是一个groupby对象。

<pandas.core.groupby.DataFrameGroupBy object at 0x0000000008B190B8>
任何建议?

可能是pandas groupby sort within groups的重复问题。 - Sean.H
2个回答

25

你不能直接将sort_values应用于groupby对象,但需要使用apply

df.groupby('A').apply(lambda x: x.sort_values('B'))

给您所需的输出:

         A   B           C  D
A                            
one 0  one  Ar  12/15/2011  1
    4  one  Ar  03/03/2000  5
    1  one  Br  11/11/2001  7
two 3  two  Ar   07/3/1999  4
    2  two  Cr  08/30/2015  3

1

通常我只使用sort_values来间接地根据列A对值进行分组,并在组内按列B排序。这是:

sort_group = df.sort_values(['A', 'B'])

这将会给你提供这样的结果:
    A   B          C    D
0   one Ar  12/15/2011  1
4   one Ar  03/03/2000  5
1   one Br  11/11/2001  7
3   two Ar  07/3/1999   4
2   two Cr  08/30/2015  3

这将返回一个普通的DataFrame,您可以在其中继续进行分析。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接