我有。
col1
0 1
1 2
2 3
3 4
4 5
5 6
...
我想让原数据框中的每3行 在新数据框中变成一行
col1 col2 col3
0 1 2 3
1 4 5 6
...
有什么建议吗?
数据框的值是一个数组,可以使用numpy的reshape方法重塑。然后,使用重塑后的值创建一个新的数据框。假设你现有的数据框是df-。
df_2 = pd.DataFrame(df.values.reshape(2, 3), columns=['col1', 'col2', 'col3'])
这将创建两行三列的新数据框。
col1 col2 col3
0 0 1 2
1 3 4 5
你可以使用 set_index
和 unstack
以获得正确的形状,并 add_preffix
来改变列名。
print (df.set_index([df.index//3, df.index%3+1])['col1'].unstack().add_prefix('col'))
col1 col2 col3
0 1 2 3
1 4 5 6
如果原来的索引不是连续的值,但你还是想每3行重塑一次,就用这个名字来代替原来的索引 df.index
由 np.arange(len(df))
两者都在 set_index
你可以在numpy数组中隐蔽col,然后再重塑。
In [27]: np.array(df['col1']).reshape( len(df) // 3 , 3 )
Out[27]:
array([[1, 2, 3],
[4, 5, 6]])
In [..] :reshaped_cols = np.array(df['col1']).reshape( len(df) // 3 , 3 )
pd.DataFrame( data = reshaped_cols , columns = ['col1' , 'col2' , 'col3' ] )
Out[30]:
col1 col2 col3
0 1 2 3
1 4 5 6