3 回答

TA贡献1877条经验 获得超1个赞
想法是将不匹配的值替换为缺失值然后排序,最后按新索引更改顺序:
idx = (df[['colA','colB']].where(df[['colA','colB']] > 0.5)
.sort_values(['colA','colB'], ascending=False).index)
df1 = df.loc[idx]
print (df1)
colA colB
0 0.97 0.01
1 0.88 0.03
3 0.02 0.99
2 0.03 0.87
细节:
print (df[['colA','colB']].where(df[['colA','colB']] > 0.5))
colA colB
0 0.97 NaN
1 0.88 NaN
2 NaN 0.87
3 NaN 0.99
print (df[['colA','colB']].where(df[['colA','colB']] > 0.5)
.sort_values(['colA','colB'], ascending=False))
colA colB
0 0.97 NaN
1 0.88 NaN
3 NaN 0.99
2 NaN 0.87

TA贡献1847条经验 获得超11个赞
构建一个与“a”相同但忽略较小值的新列,并使用此新值和“b”进行排序:
df.assign(simplified_a = np.where(df.colA<0.5, 0, df.colA))\
.sort_values(["simplified_a", "colB"], ascending=False).drop("simplified_a", axis=1)
结果:
colA colB
0 0.97 0.01
1 0.88 0.03
3 0.02 0.99
2 0.03 0.87

TA贡献1809条经验 获得超8个赞
根据条件过滤数据场,然后排序,然后追加
df1 = df.where(df['colA'] > 0.5).sort_values('colA')
df2 = df.where(df['colA'] <= 0.5).sort_values('colB')
final_frame = df1.append(df2).dropna()
colA colB
0 0.87 0.01
1 0.88 0.03
2 0.03 0.87
3 0.02 0.99
添加回答
举报