如何在 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
我有一个特定的案例,我想转换这个 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