与pandas中的列和索引折叠

spl*_*ter 1 python numpy dataframe python-3.x pandas

我期待DataFrame使用python3 对熊猫进行特定操作.我要崩溃了一个N×K个 DataFrameNKx3 DataFrame它由三列组成:入门,列从原来的索引DataFrame.这是一个例子:

          'a' 'b' 'c'
    'e'    1   2   3
    'f'    4   5   6
Run Code Online (Sandbox Code Playgroud)

期望的输出:

         0   1   2
    0    1  'a' 'e'
    1    4  'a' 'f'
    2    2  'b' 'e'
    3    5  'b' 'f'
    4    3  'c' 'e'
    5    6  'c' 'f'
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种pythonic优雅的方法来实现这一点,但是当我处理非常大的数据帧时,最高优先级是效率.

piR*_*red 6

pandas

unstack+reset_index

df.unstack().reset_index()

  level_0 level_1  0
0       a       e  1
1       a       f  4
2       b       e  2
3       b       f  5
4       c       e  3
5       c       f  6
Run Code Online (Sandbox Code Playgroud)

完全复制你拥有的东西

df.unstack().rename_axis([1, 2]).reset_index().sort_index(1)

   0  1  2
0  1  a  e
1  4  a  f
2  2  b  e
3  5  b  f
4  3  c  e
5  6  c  f
Run Code Online (Sandbox Code Playgroud)

numpy

v = df.values
pd.DataFrame({
        0: v.ravel('F'),
        1: df.columns.values.repeat(v.shape[0]),
        2: np.tile(df.index.values, v.shape[1])
    })

   0  1  2
0  1  a  e
1  4  a  f
2  2  b  e
3  5  b  f
4  3  c  e
5  6  c  f
Run Code Online (Sandbox Code Playgroud)