Python 根据行的条件对一个数据帧应用两种排序方法
如果Col2值为偶数,我希望这些行按Col2和col3升序排序。如果Col2值是奇数,我希望这些行按Col2升序和Col3降序排序。示例如下: DF_原件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 期望测
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没有正确排序。感谢您的反馈。我不知道为什么会是这种情况,但是,第二个更好。快乐编码!