pandas-将列名称作为值

时间:2019-05-09 23:42:30

标签: python pandas

我有一个这样的数据框:

      1     2     3     4     5     6
     Ax    Ax    Ax    Ax    Ax    Ax
  delta delta delta delta delta delta
0     6     4     1     5     3     2
1     6     1     5     3     2     4
2     6     1     5     3     2     4
3     6     1     5     3     2     4
4     6     1     5     3     2     4
5     6     1     5     3     2     4
6     6     1     5     3     2     4
7     6     1     5     3     2     4
8     6     1     5     3     2     4
9     6     1     5     3     2     4

我想对此进行透视,以使值是列,而列是值。

因此,前两行将变为以下内容:

      1     2     3     4     5     6
0     3     6     5     2     4     1
1     3     6     2     5     4     1

我希望这是有道理的。我已经尝试过使用pivot()和pivot_table(),但这似乎是不可能的。

2 个答案:

答案 0 :(得分:1)

尝试:

df1 = df.copy()
df1.columns = df1.columns.droplevel([1,2])

df1.stack().reset_index().pivot(index='level_0', columns=0)

答案 1 :(得分:1)

通过排序的索引对列进行切片:

import numpy as np
import pandas as pd

cols = df.columns.get_level_values(0).to_numpy()
pd.DataFrame(cols[np.argsort(df.to_numpy(), 1)],
             columns=list(range(1, df.shape[1]+1)))

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