Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 python中groupby之后的双重排名_Python 2.7_Pandas_Group By - Fatal编程技术网

Python 2.7 python中groupby之后的双重排名

Python 2.7 python中groupby之后的双重排名,python-2.7,pandas,group-by,Python 2.7,Pandas,Group By,我做了一个groupby,它生成了一个类似于下面示例的数据帧 df = pd.DataFrame({'a': ['A', 'A','A', 'B', 'B','B'], 'b': ['A1', 'A2','A3' ,'B1', 'B2','B3'], 'c': ['2','3','4','5','6','1'] }) >>> df a b c 0 A A1 2 1 A A2 3 2 A A3 4 3 B B1 5 4 B B2 6 5

我做了一个groupby,它生成了一个类似于下面示例的数据帧

df = pd.DataFrame({'a': ['A', 'A','A', 'B', 'B','B'], 'b': ['A1', 'A2','A3' ,'B1', 'B2','B3'], 'c': ['2','3','4','5','6','1'] })

>>> df
   a   b  c
0  A  A1  2
1  A  A2  3
2  A  A3  4
3  B  B1  5
4  B  B2  6
5  B  B3  1
期望输出

>>> df
       a   b  c
    4  B  B2  6
    3  B  B1  5
    5  B  B3  1       
    2  A  A3  4
    1  A  A2  3
    0  A  A1  2 
正如你所看到的,这是一个基于a列然后是b列的双重排名。我们首先从最高点B开始,在B内,我们也从最高点B2开始

我如何在python中做到这一点请使用

In [1072]: df.sort_values(by=['a', 'c'], ascending=[False, False])
Out[1072]:
   a   b  c
4  B  B2  6
3  B  B1  5
5  B  B3  1
2  A  A3  4
1  A  A2  3
0  A  A1  2

您可以首先在每个组中找到最大值,然后根据此局部最大值和列
c
对DF进行降序排序:

In [49]: (df.assign(x=df.groupby('a')['c'].transform('max'))
            .sort_values(['x','c'], ascending=[0,0])
            .drop('x',1))
Out[49]:
   a   b  c
4  B  B2  6
3  B  B1  5
5  B  B3  1
2  A  A3  4
1  A  A2  3
0  A  A1  2

我认为需要首先通过聚合获得
max
值,然后通过排序
max
索引创建排序,最后根据需要进行操作:

c = df.groupby('a')['c'].max().sort_values(ascending=False)
print (c)
a
B    6
A    4
Name: c, dtype: object

df['a'] = pd.Categorical(df['a'], categories=c.index, ordered=True)
df = df.sort_values(by=['a', 'c'], ascending=[True, False])
print (df)
   a   b  c
4  B  B2  6
3  B  B1  5
5  B  B3  1
2  A  A3  4
1  A  A2  3
0  A  A1  2

如果
2A A3 4
更改为
2A A3 7
,会发生什么情况?谢谢您的帮助。“sort_values”对我不起作用,所以我用df.sort(['a','b'],升序=[False,False])对它进行了更改。谢谢你,MaxU。与前面的答案有什么不同?你只是在重置索引吗?或者做更多的事情?顺便说一下,“sort_值”不适用于更新答案的甲烷储罐。即使是“分配”对我也不起作用。我的公司有一个旧的python版本(我不允许升级)你的pandas版本是什么?>>>pd.\uuuuu版本\uuuuuu'0.14.1'@SBad,不需要接触系统Python-这就是我在公司中使用它的方式-我有几个VirtualEnv,它们具有不同的模块和/或不同的模块版本,因此它们完全独立于系统Python(在旧RedHat机器上通常是Python 2.4),并且彼此独立。。。