Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.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_Pandas_Dataframe - Fatal编程技术网

Python 根据行的条件对一个数据帧应用两种排序方法

Python 根据行的条件对一个数据帧应用两种排序方法,python,pandas,dataframe,Python,Pandas,Dataframe,如果Col2值为偶数,我希望这些行按Col2和col3升序排序。如果Col2值是奇数,我希望这些行按Col2升序和Col3降序排序。示例如下: DF_原件 Col1 Col2 Col3 E 3 23 D 2 10 E 1 12 E 2 18 D 2 6 E 1 21 D 3 14 D 3 9 期望测

如果Col2值为偶数,我希望这些行按Col2和col3升序排序。如果Col2值是奇数,我希望这些行按Col2升序和Col3降序排序。示例如下:

DF_原件

Col1   Col2   Col3
 E      3       23
 D      2       10
 E      1      12
 E      2       18
 D      2       6
 E      1       21
 D      3       14
 D      3       9
期望测向

Col1    Col2    Col3
 E       1       21
 E       1       12
 D       2        6
 D       2       10
 E       2       18
 E       3       23
 D       3       14
 D       3        9

谢谢您的帮助。

我认为您需要将数据帧分成两部分,并在排序后连接起来

m = df['Col2'] % 2 == 0
d1=df[m].sort_values('Col3')
d2=df[~m].sort_values('Col3', ascending=False)
pd.concat([d1, d2]).sort_values('Col2')
输出:

  Col1  Col2  Col3
5    E     1    21
2    E     1    12
4    D     2     6
1    D     2    10
3    E     2    18
0    E     3    23
6    D     3    14
7    D     3     9
  Col1  Col2  Col3
5    E     1    21
2    E     1    12
4    D     2     6
1    D     2    10
3    E     2    18
0    E     3    23
6    D     3    14
7    D     3     9
没有拆分和合并的类似方式:

m = df['Col2'] % 2 == 0
df.assign(sortkey=df['Col3']*np.where(m,1,-1))\
  .sort_values(['Col2','sortkey']).drop('sortkey', axis=1)
输出:

  Col1  Col2  Col3
5    E     1    21
2    E     1    12
4    D     2     6
1    D     2    10
3    E     2    18
0    E     3    23
6    D     3    14
7    D     3     9
  Col1  Col2  Col3
5    E     1    21
2    E     1    12
4    D     2     6
1    D     2    10
3    E     2    18
0    E     3    23
6    D     3    14
7    D     3     9

请加上你的努力,你已经尝试了什么。我们很乐意提供帮助,但我们不是自由劳动力。
df.sort\u值(['Col2','Col3'])
?@QuangHoang这并不是那么简单的
df.sort\u值(['Col2','Col3'],ascendint=[True,False])
?FWIW。。。第二种选择我最好能成功。当我尝试第一个选项时,“pd.concat([d1,d2]).sort_值('Col2')”导致col3没有正确排序。感谢您的反馈。我不知道为什么会是这种情况,但是,第二个更好。快乐编码!