如何在 groupby 之后将数据框中的行值转换为 Python 中的列标签?

How to convert rows values in dataframe to columns labels in Python after groupby?

我有一个特定的案例,我想转换这个 df: 打印 df

Schoolname  Attribute    Value  
0  xyz School  Safe         3.44  
1  xyz School  Cleanliness  2.34  
2  xyz School  Money        4.65  
3  abc School  Safe         4.40  
4  abc School  Cleanliness  4.50  
5  abc School  Money        4.90  
6  lmn School  Safe         2.34   
7  lmn School  Cleanliness  3.89  
8  lmn School  Money        4.65

我需要以这种格式获取,以便我可以将其转换为 numpy 数组以进行线性回归建模。

required_df:    
   Schoolname  Safe  Cleanliness Money  
0 xyz School   3.44   2.34       4.65   
1 abc School   4.40   4.50       4.90    
2 lmn School   2.34   3.89       4.65

我知道我们需要做 groupby('Schoolname') 但之后无法考虑让行名称成为列标签和相应的值反映在 required_df.

我需要这种格式,以便我可以将其转换为 numpy 数组并将其作为我的 X 向量提供给线性回归模型。

你可以使用 pd.pivot

In [171]: df.pivot(index='Schoolname', columns='Attribute', values='Value')
Out[171]:
Attribute   Cleanliness  Money  Safe
Schoolname
abc-School         4.50   4.90  4.40
lmn-School         3.89   4.65  2.34
xyz-School         2.34   4.65  3.44

或更易表达pd.pivot_table

In [172]: pd.pivot_table(df, values='Value', index='Schoolname', columns='Attribute')
Out[172]:
Attribute   Cleanliness  Money  Safe
Schoolname
abc-School         4.50   4.90  4.40
lmn-School         3.89   4.65  2.34
xyz-School         2.34   4.65  3.44