Python:根据其值将一列分为两列

时间:2019-10-16 22:00:38

标签: python pandas

我正试图从“我的起始数据框”中获取

My Starting DataFrame

到我想要的结果

My Desired Results

我正在尝试对两列(名称,月份)进行分组,并且我有一列(类别)的值是“ Score1”或“ Score2”。我想用Category列中的值名称创建两个列,并将它们的值设置为从另一列中确定的值。

pd.crosstab([df.Name, df.Month], df.Category)

是我创建期望数据框架的最接近的方法,但是我不知道如何从“值”列中获取值来填充数据框架。

交叉表的结果

Results from crosstab

代码形式的数据框

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]

谢谢!

2 个答案:

答案 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)

一种方法是使用groupbyunstack

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