首页 > 解决方案 > Pandas,将多行转换为多列

问题描述

我有一个样本数据

Index, Column1,Value1
1,  1,6
1,  2,7
1,  3,8
Index,  Column1,Value1
2,  11,16
2,  12,17
2,  13,18
2,  14,19
2,  15,20
Index,  Column1,Value1
3,  21,24
3,  22,25

我想以这种方式重塑

Index Column1, Value1, Column2, Value2, Column3, Value3, Column4, Value4
1   1,  6,  2,  7,  3,  8
2   11, 16, 12, 17, 13, 18, 14, 19
3   21, 24, 22, 25  

我正在使用这个

print(df.groupby('Index')[['Column1', 'Value1']].apply(','.join).reset_index())

但我得到了奇怪的输出。我在这里做错了什么?有什么建议么 ?

Index               0
    1  Column1,Value1
    2  Column1,Value1
    3  Column1,Value1
Index  Column1,Value1

标签: pythonpandasdataframe

解决方案


编辑:

3列输入DataFrame的解决方案:

df = df[df['Column1'] != 'Column1']
s =  df.groupby('Index').cumcount().add(1)
df = (df.set_index(['Index',s])
        .unstack()
        .sort_index(axis=1, level=1)
       )
df.columns = ['{}_{}'.format(a, b) for a,b in df.columns]

df = df.reset_index()
print (df)
  Index Column1_1 Value1_1 Column1_2 Value1_2 Column1_3 Value1_3 Column1_4  \
0     1         1        6         2        7         3        8       NaN   
1     2        11       16        12       17        13       18        14   
2     3        21       24        22       25       NaN      NaN       NaN   

  Value1_4 Column1_5 Value1_5  
0      NaN       NaN      NaN  
1       19        15       20  
2      NaN       NaN      NaN  

推荐阅读