将列传递给python pandas上的行

Ros*_*dra 6 python dataframe pandas

我有这样的数据框

 id  a  b  c
101  0  3  0
102  2  0  5
103  0  1  4
Run Code Online (Sandbox Code Playgroud)

我想要这样的东西

 id  letter  num
101     a     0
101     b     3
101     c     0
102     a     2
102     b     0
102     c     5
103     a     0
103     b     1
103     c     4
Run Code Online (Sandbox Code Playgroud)

我想将列名称传递给行的值及其对应的id和df的结果.

我试图在循环中创建它,根据它的id引入每个元素,但它太可怕了.是否有捷径可寻?

Ale*_*ley 6

你可以melt然后排序:

>>> pd.melt(df, id_vars='id', value_vars=['a','b','c'], 
            var_name='letter', value_name='num').sort_values('id')
    id letter  num
0  101      a    0
3  101      b    3
6  101      c    0
1  102      a    2
4  102      b    0
7  102      c    5
2  103      a    0
5  103      b    1
8  103      c    4
Run Code Online (Sandbox Code Playgroud)

如果要重置索引,可以始终.reset_index(drop=True)在返回的DataFrame上使用.