Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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 根据其他列值对数据帧进行排序_Python_Sorting_Pandas - Fatal编程技术网

Python 根据其他列值对数据帧进行排序

Python 根据其他列值对数据帧进行排序,python,sorting,pandas,Python,Sorting,Pandas,我有这个数据帧df 我使用df=df.sort(列a、列b) 但是我会根据col_bmin和max值对df进行排序,首先将col_a值与mincol_b值进行排序,最后将col_a值与maxcol_b值进行排序: col_a col_b b 5 b 10 b 12 a 6 a 7 a 8 a 11 c 11

我有这个数据帧
df

我使用
df=df.sort(列a、列b)

但是我会根据
col_b
min和max值对
df
进行排序,首先将
col_a
值与min
col_b
值进行排序,最后将
col_a
值与max
col_b
值进行排序:

 col_a col_b      
   b     5      
   b     10
   b     12
   a     6      
   a     7      
   a     8      
   a     11      
   c     11      
   c     13      
   c     14    
有没有一种使用熊猫功能进行这种排序的快速方法

编辑1:

@底漆溶液适用于2列
df
。 使用此
df

    col_a  col_b  col_c
0     a      6      9
1     a      7      8
2     a      8      7
3     a     11      6
4     b      5      5
5     b     10      4
6     b     12      3
7     c     11      2
8     c     13      1
9     c     14      0
返回

ValueError: Wrong number of items passed 2, placement implies 1
编辑2

d = {'col_a' : ['a','a','a','a','b','b','c','c','c'],
    'col_b' :[6,7,8,11,12,13,11,13,14],
    'col_c' :[9,8,7,6,5,4,3,2,1]
    }

df = DataFrame(d)
返回:

  col_a  col_b  col_c
0     a      6      9
1     a      7      8
2     a      8      7
3     a     11      6
4     b     12      5
5     b     13      4
6     c     11      3
7     c     13      2
8     c     14      1
@使用此
df
的底漆,您的代码不起作用,因为它返回:

  col_a  col_b  col_c
0     a      6      9
1     a      7      8
2     a      8      7
3     a     11      6
4     c     11      3
5     c     13      2
6     c     14      1
7     b     12      5
8     b     13      4
我需要

  col_a  col_b  col_c
0     a      6      9
1     a      7      8
2     a      8      7
3     a     11      6
4     b     12      5
5     b     13      4
6     c     11      3
7     c     13      2
8     c     14      1
由于
c
组具有
max(value)=14
,因此您的代码采用
max(min)
值,您可以这样做:

df['min'] = df.groupby('col_a')['col_b'].transform(lambda x: x.min())
df = df.sort(['min', 'col_a', 'col_b']).reset_index(drop=True).drop('min', 1)
df
这将产生:

  col_a  col_b
0     b      5
1     b     10
2     b     12
3     a      6
4     a      7
5     a      8
6     a     11
7     c     11
8     c     13
9     c     14
编辑:

我已经修复了上面的代码,以确保
transform
用于series而不是dataframe(从而避免了错误)

为我工作返回:

  col_a  col_b  col_c
0     b      5      5
1     b     10      4
2     b     12      3
3     a      6      9
4     a      7      8
5     a      8      7
6     a     11      6
7     c     11      2
8     c     13      1
9     c     14      0

我想您可以很容易地将其转换为一个函数,应用于就地的数据帧。

real df比示例中的df有更多的列,因此您的代码返回
ValueError:传递的项目数错误7,placement意味着1
@franco_b我想您需要提供更多详细信息来解释为什么使用此解决方案,使用示例数据实现所需输出的方法对实际数据不起作用。@franco_b ok,但您刚刚接受了此答案,您是否已准备就绪?请参阅答案中的编辑以查看此错误的修复方法(因为您添加了更多列
transform
应用于GroupbyDataframe而不是系列)-只需在
groupby
之后传递列的名称,即可应用
transform
。@Primer我只需编辑问题,说明代码不起作用的原因
  col_a  col_b  col_c
0     b      5      5
1     b     10      4
2     b     12      3
3     a      6      9
4     a      7      8
5     a      8      7
6     a     11      6
7     c     11      2
8     c     13      1
9     c     14      0