Python 使用shape或pivot_表(堆叠每行)重新塑造数据帧

Python 使用shape或pivot_表(堆叠每行)重新塑造数据帧,python,pandas,stack,reshape,Python,Pandas,Stack,Reshape,我有一个几乎让人难堪的简单问题,我自己无法解决 下面是一个玩具示例,演示我想做什么,假设我有一个简单的数据框: df = pd.DataFrame([[1,2,3,4,5,6],[7,8,9,10,11,12]],index=range(2),columns=list('abcdef')) a b c d e f 0 1 2 3 4 5 6 1 7 8 9 10 11 12 我想要的是堆叠它,使其采用以下形式,其中列标识符已更改(为X和Y)

我有一个几乎让人难堪的简单问题,我自己无法解决

下面是一个玩具示例,演示我想做什么,假设我有一个简单的数据框:

df = pd.DataFrame([[1,2,3,4,5,6],[7,8,9,10,11,12]],index=range(2),columns=list('abcdef'))

   a  b  c   d   e   f
0  1  2  3   4   5   6
1  7  8  9  10  11  12
我想要的是堆叠它,使其采用以下形式,其中列标识符已更改(为X和Y),以便所有重新堆叠的值都相同:

   X  Y 
0  1  2 
   3  4
   5  6
1  7  8  
   9  10  
   11 12
我很确定你可以用或来做,但我已经阅读了文档,但不知道如何做。但是,我不想将所有列追加到下一行的末尾,我只想从每一行追加一对值(实际上是三个值)

只是为了给我想做的事情增添一些血肉

df = pd.DataFrame(np.random.randn(3,6),index=range(3),columns=list('abcdef'))

          a         b         c         d         e         f
0 -0.168636 -1.878447 -0.985152 -0.101049  1.244617  1.256772
1  0.395110 -0.237559  0.034890 -1.244669 -0.721756  0.473696
2 -0.973043  1.784627  0.601250 -1.718324  0.145479 -0.099530
我希望将其重新堆叠到该表单中(其中列标签已再次更改,所有值都相同):

是的,可以在每一行上使用以下逻辑创建一个for循环:

df.values.reshape(df.shape[1]/3,2)
但是你必须单独计算每一行,我的实际数据有上万行

因此,我希望有选择地堆叠每一行(例如,通过成对的值或三元组),然后基本上针对整个数据帧堆叠该行堆栈。最好一次对整个数据帧执行(如果可能)

为这样一个微不足道的问题道歉

用于重塑数据帧中的基础数据:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(3,6),index=range(3),columns=list('abcdef'))
print(df)
#           a         b         c         d         e         f
# 0 -0.889810  1.348811 -1.071198  0.091841 -0.781704 -1.672864
# 1  0.398858  0.004976  1.280942  1.185749  1.260551  0.858973
# 2  1.279742  0.946470 -1.122450 -0.355737  1.457966  0.034319
result = pd.DataFrame(df.values.reshape(-1,3),
                      index=df.index.repeat(2), columns=list('XYZ'))
print(result)
屈服

          X         Y         Z
0 -0.889810  1.348811 -1.071198
0  0.091841 -0.781704 -1.672864
1  0.398858  0.004976  1.280942
1  1.185749  1.260551  0.858973
2  1.279742  0.946470 -1.122450
2 -0.355737  1.457966  0.034319
          X         Y         Z
0 -0.889810  1.348811 -1.071198
0  0.091841 -0.781704 -1.672864
1  0.398858  0.004976  1.280942
1  1.185749  1.260551  0.858973
2  1.279742  0.946470 -1.122450
2 -0.355737  1.457966  0.034319