将行移动到第一行(作为新列)pandas

时间:2018-02-01 19:45:22

标签: python pandas

我是pandas的新手,我试图执行一些表操作。我不确定如何调用我正在寻找的动作。

我有一个pandas数据帧(实际的数据帧更大,但这些是我需要转换的cols:

   pr10      pr50      pr90
25.6214   30.2753    36.634
1.94509   3.84798   6.55111
      0         0   0.00835
      0         0  0.007279

我想将其转换为:

pr10_0  pr50_0  pr90_0  pr10_1  pr50_1  pr90_1  pr10_2  pr50_2  pr90_2  pr10_3  pr50_3  pr90_3  pr10_4  pr50_4  pr90_4
25.6214 30.2753 36.634  1.94509 3.84798 6.55111 0   0   0.00835 0   0   0.007279    0.003505    0.007009    0.014764

我该如何实现?

2 个答案:

答案 0 :(得分:1)

使用stack并加入多重索引

df1=df.stack().to_frame(0).T

df1.columns=df1.columns.map('{0[1]}_{0[0]}'.format) 
df1
Out[445]: 
    pr10_0   pr50_0  pr90_0   pr10_1   pr50_1   pr90_1  pr10_2  pr50_2  \
0  25.6214  30.2753  36.634  1.94509  3.84798  6.55111     0.0     0.0   
    pr90_2  pr10_3  pr50_3    pr90_3  
0  0.00835     0.0     0.0  0.007279  

答案 1 :(得分:0)

您可以重新创建数据框:

从当前数据框

创建新列
cols = [name+'_{}'.format(num // len(df.columns)) for num,name in enumerate(df.columns.tolist()*len(df))]

通过展平原始数据框中的所有值来创建新数据框

pd.DataFrame(df.values.reshape(1,-1),columns=cols)
   pr10_0   pr50_0  pr90_0   pr10_1   pr50_1   pr90_1  pr10_2  pr50_2  \
0  25.6214  30.2753  36.634  1.94509  3.84798  6.55111     0.0     0.0   
    pr90_2  pr10_3  pr50_3    pr90_3  
0  0.00835     0.0     0.0  0.007279