我有一个熊猫数据框,用于热图。我希望每列的最小值沿着对角线。
我已经使用
对列进行了排序- (instancetype)initWithSenderId:(NSString *)senderId
senderDisplayName:(NSString *)senderDisplayName
date:(NSDate *)date
text:(NSString *)text;
这有效。现在,我只需要对值进行排序,以使第一列的最小值的索引为第0行,然后第二列的最小值为第1行,依此类推。
示例
messageID
这是否可以巧妙地在熊猫中实现?
答案 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.argsort
与np.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, :]