python:如何熔化保留特定顺序/自定义排序的数据帧

2024-04-29 08:34:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧数据框

Cat  B_1 A_2 C_3
A      1   2   3
B      4   5   6
C      7   8   9

我想把它转换成一个dataframe,这样column Label中的行按照每个类别的df列的顺序排列。在

^{pr2}$

当我尝试

pd.melt(df, id_vars=["Cat"], var_name="Label",value_name="Value")

我失去了列标签中所需的顺序,结果如下所示排序

Cat Label Value
A     B_1    1
B     B_1    4
C     B_1    7
A     A_2    2
...

在熔融功能中,可以强制要求行的顺序吗? 如果没有,如何实现这种自定义排序?


更新

我重新命名了标签,因为它们不遵循字母顺序,所以简单的排序就不起作用了


Tags: 数据namedataframedf排序顺序valuecolumn
1条回答
网友
1楼 · 发布于 2024-04-29 08:34:43

IIUC,您可以使用完全相同的代码并添加.sort_values('Cat'),或者更简单:

df.melt('Cat',var_name='Label',value_name='Value').sort_values('Cat')

  Cat Label  Value
0   A   L_1      1
3   A   L_2      2
6   A   L_3      3
1   B   L_1      4
4   B   L_2      5
7   B   L_3      6
2   C   L_1      7
5   C   L_2      8
8   C   L_3      9

如果要以自定义方式对其进行排序(在下面的示例中,B位于A之前,C)则可以将{}设置为有序类别:

^{pr2}$

另一种方法是使用stack,但随后必须处理令人讨厌的列重命名:

df.set_index('Cat').stack().reset_index().rename(columns={'level_1':'Label', 0:'Value'})

  Cat Label  Value
0   A   L_1      1
1   A   L_2      2
2   A   L_3      3
3   B   L_1      4
4   B   L_2      5
5   B   L_3      6
6   C   L_1      7
7   C   L_2      8
8   C   L_3      9

相关问题 更多 >