Python:在列之间交换值以在行内对它们进行排序

时间:2018-04-20 21:35:12

标签: python pandas dataframe

我的数据框有多列,我想将其中的3个从最小到最大排序

输入:

+----+--------+--------+--------+
| No | MinVal | MidVal | MaxVal |
+----+--------+--------+--------+
|  1 |      2 |      4 |      3 |
|  2 |      5 |      6 |      8 |
|  3 |      8 |      8 |      1 |
+----+--------+--------+--------+

期望的输出:

+----+--------+--------+--------+
| No | MinVal | MidVal | MaxVal |
+----+--------+--------+--------+
|  1 |      2 |      3 |      4 |
|  2 |      5 |      6 |      8 |
|  3 |      1 |      8 |      8 |
+----+--------+--------+--------+

所以我想在列MinValMidValMaxVal之间交换值,以便从最低到最高排序。

我希望不使用循环来实现它,所以使用apply()或其他函数。

谢谢:)

1 个答案:

答案 0 :(得分:1)

您只需要sort

df=df.set_index('No')
df.values.sort(axis=1)
df
Out[212]: 
    MinVal  MidVal  MaxVal
No                        
1        2       3       4
2        5       6       8
3        1       8       8

更新

df[['MinVal','MidVal','MaxVal']]=np.sort(df[['MinVal','MidVal','MaxVal']].values,axis=1)
df
Out[215]: 
   No  MinVal  MidVal  MaxVal
0   1       2       3       4
1   2       5       6       8
2   3       1       8       8