将Python Pandas DataFrame行重新排列为单行

时间:2015-10-17 04:55:02

标签: python pandas

我有一个类似于Pandas的数据框:

df = pd.DataFrame({'col1': [1, 2, 3, 4], 'col2': [5, 6, 7, 8]}, index=['A', 'B', 'C', 'D'])

    col1    col2
A   1       50
B   2       60
C   3       70
D   4       80

但是,我想自动重新排列它,使其看起来像:

    col1 A    col1 B    col1 C    col1 D    col2 A    col2 B    col2 C    col2 D
0   1         2         3         4         50        60        70        80
  1. 我想将行名称与列名称结合起来
  2. 我想最终只有一行

2 个答案:

答案 0 :(得分:1)

df2 = df.unstack()
df2.index = [' '.join(x) for x in df2.index.values]
df2 = pd.DataFrame(df2).T

df2

    col1 A  col1 B  col1 C  col1 D  col2 A  col2 B  col2 C  col2 D
0   1       2       3       4       5       6       7       8

如果您想在列名前面加上orignal x轴标签(" A col1" ...),只需按.join(x)更改.join(x[::-1])

df2 = df.unstack()
df2.index = [' '.join(x[::-1]) for x in df2.index.values]
df2 = pd.DataFrame(df2).T

df2

    A col1  B col1  C col1  D col1  A col2  B col2  C col2  D col2
0   1       2       3       4       5       6       7       8

答案 1 :(得分:0)

这是一种方法,可以采用更简单的方式

In [562]: df = pd.DataFrame({'col1': [1, 2, 3, 4], 'col2': [50, 60, 70, 80]}, 
                           index=['A', 'B', 'C', 'D'])

In [563]: pd.DataFrame([df.values.T.ravel()], 
                       columns=[y+x for y in df.columns for x in df.index])
Out[563]:
   col1A  col1B  col1C  col1D  col2A  col2B  col2C  col2D
0      1      2      3      4     50     60     70     80