对熊猫数据框进行排序以沿对角线获取最小值

时间:2018-08-07 06:36:18

标签: python pandas dataframe

我有一个熊猫数据框,用于热图。我希望每列的最小值沿着对角线。

我已经使用

对列进行了排序
- (instancetype)initWithSenderId:(NSString *)senderId
senderDisplayName:(NSString *)senderDisplayName
date:(NSDate *)date
text:(NSString *)text;

这有效。现在,我只需要对值进行排序,以使第一列的最小值的索引为第0行,然后第二列的最小值为第1行,依此类推。

示例

messageID

这是否可以巧妙地在熊猫中实现?

3 个答案:

答案 0 :(得分:2)

设置

data = pd.DataFrame([[5, 1, 9], [7, 8, 6], [5, 3, 2]])

您可以通过使用argsort排序的DataFrame的对角元素来完成此操作,然后使用这些值对DataFrame进行索引。

第1步
使用您的初始排序:

data = data.loc[:, data.min().sort_values().index]

   1  2  0
0  1  9  5
1  8  6  7
2  3  2  5

第2步
np.argsortnp.diag一起使用:

data.iloc[np.argsort(np.diag(data))]

   1  2  0
0  1  9  5
2  3  2  5
1  8  6  7

答案 1 :(得分:0)

要移动一些值,以使每列中的最小值沿着对角线放置,您可以尝试如下操作:

for i in range(len(data)):
    min_index = data.iloc[:, i].idxmin()
    if data.iloc[i,i] != data.iloc[min_index, i]:
        data.iloc[i,i], data.iloc[min_index,i] = data.iloc[min_index, i], data.iloc[i,i]

基本上只是将对角线换成对角线。

答案 2 :(得分:0)

我不太确定,但是您已经完成了以下对列进行排序的操作

data = data.loc[:, data.min().sort_values().index]

相同的技巧也可以用于对行进行排序

data = data.loc[data.min(axis=1).sort_values().index, :]