Python 使用根据数据排序的标签创建dataframe

Python 使用根据数据排序的标签创建dataframe,python,pandas,Python,Pandas,编辑:我编辑了这个示例,因为前面的示例可以用不同的方式进行解释 我有一个带有行标签的数据框,每列中都有标签排序: 数据帧{'0':[3,1,2],'1':[2,3,1]},索引=['Red','Green','Blue'] 看起来这个真实数据有更多的列: 我想把它转换成一个矩阵,颜色名称根据每列中的等级排序 例如,第一列是[3,2,1],结果应该是['Blue','Green','Red'] 第二列是[2,3,1],结果应该是['Blue','Red','Green'] 数字是该列中每个标签的排

编辑:我编辑了这个示例,因为前面的示例可以用不同的方式进行解释

我有一个带有行标签的数据框,每列中都有标签排序:

数据帧{'0':[3,1,2],'1':[2,3,1]},索引=['Red','Green','Blue'] 看起来这个真实数据有更多的列:

我想把它转换成一个矩阵,颜色名称根据每列中的等级排序

例如,第一列是[3,2,1],结果应该是['Blue','Green','Red']

第二列是[2,3,1],结果应该是['Blue','Red','Green']

数字是该列中每个标签的排名。它们不是标签数组中的索引。因此,如果“Red”有2,则表示它应该位于列中的第二个单元格中。

在以下列中使用每列:

按列使用:


我找到了解决办法。我相信有更好的解决方案:

构造数据帧 数据帧{'0':[3,1,2],'1':[2,3,1]},索引=['Red'、'Green'、'Blue'] 准备一个空的numpy数组来保存答案 a=np.empty[3,2],dtype=np.dtype'U20' 提取索引标签并复制它们以匹配答案的形状 index=np.array[df.index.to_numpy,]*2.transpose 以numpy数组的形式获取等级 等级=df.astype'int'-1.to_numpy 使用列组作为每个标签的目标数组中的索引 np.put_沿_轴a,秩,索引,0
我找到了解决办法。我相信有更好的解决方案:

构造数据帧 数据帧{'0':[3,1,2],'1':[2,3,1]},索引=['Red'、'Green'、'Blue'] 准备一个空的numpy数组来保存答案 a=np.empty[3,2],dtype=np.dtype'U20' 提取索引标签并复制它们以匹配答案的形状 index=np.array[df.index.to_numpy,]*2.transpose 以numpy数组的形式获取等级 等级=df.astype'int'-1.to_numpy 使用列组作为每个标签的目标数组中的索引 np.put_沿_轴a,秩,索引,0
我修正了我的例子,可以用两种不同的方式来解释。这些数字不是标签数组中的索引。它们是该列中每个标签的排名。因此,如果“Red”有2,则表示它应该在列的第二个单元格中。@daramasala-是否可以更改see数据的样本,使其不与我的解决方案一起工作?因为现在,数据描述和预期输出不匹配[‘绿色’、‘红色’、‘绿色’]您是对的。我修正了这个例子。对于[2,3,1]它应该['Blue'、'Red'、'Green']红色是第二位,绿色是第三位,蓝色是第一位感谢你的努力,但我认为它只是以不同的方式做同样的事情,不是吗?它将数字用作索引数组中的索引。但这不是我想要的。我想根据单元格中的排名对标签进行排序。因此,如果“2”出现在“红色”行中,我希望“红色”是第二个元素,而不是用第二行标签替换“2”。@daramasala-最简单的是使用arr=df.applylambda x:x.sort_values.indexI修复了我的示例,该示例可以用两种不同的方式进行解释。这些数字不是标签数组中的索引。它们是该列中每个标签的排名。因此,如果“Red”有2,则表示它应该在列的第二个单元格中。@daramasala-是否可以更改see数据的样本,使其不与我的解决方案一起工作?因为现在,数据描述和预期输出不匹配[‘绿色’、‘红色’、‘绿色’]您是对的。我修正了这个例子。对于[2,3,1]它应该['Blue'、'Red'、'Green']红色是第二位,绿色是第三位,蓝色是第一位感谢你的努力,但我认为它只是以不同的方式做同样的事情,不是吗?它将数字用作索引数组中的索引。但这不是我想要的。我想根据单元格中的排名对标签进行排序。因此,如果“2”出现在“红色”行中,我希望“红色”是第二个元素,而不是用第二行标签替换“2”。@daramasala-最简单的是使用arr=df.applylambda x:x.sort_values.index
df1 = df.apply(lambda x: x.sort_values().index)
print (df1)
           0      1
Red     Blue   Blue
Green  Green    Red
Blue     Red  Green