根据索引将一列pandas数据框转换为3列。

问题描述 投票:0回答:1

我有。

    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
...

有什么建议吗?

pandas reshape
1个回答
4
投票

数据框的值是一个数组,可以使用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

0
投票

你可以使用 set_indexunstack 以获得正确的形状,并 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.indexnp.arange(len(df)) 两者都在 set_index


0
投票

你可以在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
© www.soinside.com 2019 - 2024. All rights reserved.