Pandas每N行重新整理数据帧到列

时间:2018-02-16 14:03:29

标签: python pandas numpy reshape

我的数据框如下:

df1=pd.DataFrame(np.arange(24).reshape(6,-1),columns=['a','b','c','d'])

enter image description here

我希望获取3组行并将其转换为具有以下顺序的列

enter image description here

Numpy reshape没有给出预期答案

pd.DataFrame(np.reshape(df1.values,(3,-1)),columns=['a','b','c','d','e','f','g','h'])

enter image description here

4 个答案:

答案 0 :(得分:4)

In [258]: df = pd.DataFrame(np.hstack(np.split(df1, 2)))

In [259]: df
Out[259]:
   0  1   2   3   4   5   6   7
0  0  1   2   3  12  13  14  15
1  4  5   6   7  16  17  18  19
2  8  9  10  11  20  21  22  23

In [260]: import string

In [261]: df.columns = list(string.ascii_lowercase[:len(df.columns)])

In [262]: df
Out[262]:
   a  b   c   d   e   f   g   h
0  0  1   2   3  12  13  14  15
1  4  5   6   7  16  17  18  19
2  8  9  10  11  20  21  22  23

答案 1 :(得分:2)

reshape创建3d数组:

a = np.hstack(np.reshape(df1.values,(-1, 3, len(df1.columns))))
df = pd.DataFrame(a,columns=['a','b','c','d','e','f','g','h'])
print (df)
   a  b   c   d   e   f   g   h
0  0  1   2   3  12  13  14  15
1  4  5   6   7  16  17  18  19
2  8  9  10  11  20  21  22  23

答案 2 :(得分:2)

这使用reshape/swapaxes/reshape idiom来重新排列NumPy数组的子块。

In [26]: pd.DataFrame(df1.values.reshape(2,3,4).swapaxes(0,1).reshape(3,-1), columns=['a','b','c','d','e','f','g','h'])
Out[26]: 
   a  b   c   d   e   f   g   h
0  0  1   2   3  12  13  14  15
1  4  5   6   7  16  17  18  19
2  8  9  10  11  20  21  22  23

答案 3 :(得分:0)

如果你想要一个纯粹的熊猫解决方案:

   a  b   c   d   e   f   g   h
0  0  1   2   3  12  13  14  15
1  4  5   6   7  16  17  18  19
2  8  9  10  11  20  21  22  23

输出:

"eventURL":