2015-10-17 38 views
0

我有一个熊猫数据框,看起来像:重新排列Python的熊猫数据帧行到一个单列

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. 我想结束只有一行

回答

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 
+0

会不会有一种方法做同样的事情,如果我有一个列表的2D列表(其中第一行是列名)? – slaw

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 

如果你想拥有一部开拓创新x轴的标签中列名(“A COL1”面前.. 。)只是改变由.join(x[::-1]).join(x)

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