有没有一种方法可以将一列重塑为一行,但是该行由ID列组成

时间:2019-01-22 22:01:43

标签: python pandas dataframe reshape

我正在尝试重塑数据框。将我的列排成一行,但是第一列控制行的长度。

我尝试使用pandasivot_table重塑列的形状。     例子:想要看起来。

ID  Apex   max    min    angle
1   A1     30.1  -16.9    NA
2   A1     89     NA      NA
3   B1     100   26.3    68.9

ID  Parameter   Simulated
1   Apex            A1
1   max         30.1
1   min        -16.9
2   Apex            A1
2   max         89
3   Apex            B1
3   max         100
3   min         26.3
3   angle           68.9

df1 = pd.DataFrame({'ID': [1, 1, 1, 2, 2, 3, 3, 3, 3],
               'Parameter': ['Apex', 'max', 'min', 'Apex ', 'max',               
                            'Apex', 'max', 'min', 'angle'],
                'Simulated': ['A1', 30.1, -16.9, 'A1', 89,      
                            'B1', 100, 26.3, 68.9],
                },
                 index=[0, 1, 2, 3, 4, 5, 6, 7, 8])

pd.pivot_table(df1, index = 'ID', columns ='Parameter', values = 'Simulated')

我遇到此错误- DataError:没有要聚合的数字类型

谢谢您能给我的帮助。

2 个答案:

答案 0 :(得分:2)

尝试:

df1.pivot(index='ID', columns='Parameter', values='Simulated')

输出:

Parameter Apex angle   max   min
ID                              
1           A1   NaN  30.1 -16.9
2           A1   NaN    89   NaN
3           B1  68.9   100  26.3

pivot_table假设您要汇总值,默认情况下它将使用“平均值”,因为您有字符串,因此在数据中进行旋转会导致错误。

多个条目:

df1.groupby(['ID','Parameter']).first()['Simulated'].unstack().reset_index()

答案 1 :(得分:1)

In [43]: df1.set_index(['ID', 'Parameter']).unstack()
Out[43]: 
          Simulated                        
Parameter      Apex Apex  angle   max   min
ID                                         
1                A1   NaN   NaN  30.1 -16.9
2               NaN    A1   NaN    89   NaN
3                B1   NaN  68.9   100  26.3