【问题标题】:Python: Splitting a column into two Columns based off its valuePython:根据其值将一列拆分为两列
【发布时间】:2019-10-17 11:03:49
【问题描述】:

我正在尝试从我的起始数据帧中获取

到我想要的结果

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

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

是我必须创建的最接近的数据框,但是我无法弄清楚如何从“值”列中获取值来填充数据框。

交叉表的结果

代码形式的Dataframe

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]

谢谢!

【问题讨论】:

  • 将您的数据作为代码提供比您提供的图像更有帮助,并且可以帮助您更快地获得问题的答案。
  • 对不起,这是我第一次访问这个网站。我做对了吗?
  • 看起来好多了,谢谢!

标签: python pandas


【解决方案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

【讨论】:

  • 有没有办法扭转这个过程?将 'Score1' 和 'Score2' 组合回类别列,然后将值元素设置回来?
  • @NathanLam df.melt(id_vars=['Name','Month'], var_name='Category', value_name='Value')
【解决方案2】:

一种方法是使用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多