我正试图从“我的起始数据框”中获取
到我想要的结果
。
我正在尝试对两列(名称,月份)进行分组,并且我有一列(类别)的值是“ Score1”或“ Score2”。我想用Category列中的值名称创建两个列,并将它们的值设置为从另一列中确定的值。
pd.crosstab([df.Name, df.Month], df.Category)
是我创建期望数据框架的最接近的方法,但是我不知道如何从“值”列中获取值来填充数据框架。
交叉表的结果
代码形式的数据框
df = pd.DataFrame(columns=['Name', 'Month', 'Category', 'Value'])
df['Name'] = ['Jack','Jack','Sarah','Sarah','Zack']
df['Month'] = ['Jan.','Jan.','Feb.','Feb.','Feb.']
df['Category'] = ['Score1','Score2','Score1','Score2','Score1']
df['Value'] = [1,2,3,4,5]
谢谢!
答案 0 :(得分:1)
您可以使用Pivot Table
df.pivot_table(index=['Name', 'Month'],values='Value', columns='Category').rename_axis(None, axis=1).reset_index()
Out[1]:
Name Month Score1 Score2
0 Jack Jan. 1.0 2.0
1 Sarah Feb. 3.0 4.0
2 Zack Feb. 5.0 NaN
答案 1 :(得分:0)
一种方法是使用groupby
和unstack
new_df = (df.groupby(['Name','Month','Category'])
['Value'].first().unstack().reset_index())
print(new_df)
Category Name Month Score1 Score2
0 Jack Jan. 1.0 2.0
1 Sarah Feb. 3.0 4.0
2 Zack Feb. 5.0 NaN