【问题标题】:Unstack two columns at the same time to produce a concatenated columnname同时取消堆叠两列以生成连接的列名
【发布时间】:2018-03-22 04:23:41
【问题描述】:

我有一个分组数据框,如下所示:

Date         ID        Name       Category     Group        Amount
2018-02-28   123       ABC         Fruits      INT           22345
2018-02-28   456       JFGT        Veg         FEE           56789
2018-02-28   5687      AST         Seeds       FEE           4567
2018-02-28   5687      AST         Seeds       INT           236
.............
.............
2018-03-31   123       ABC         Fruits      INT           790
2018-03-31   456       JFGT        Veg         FEE           35637
2018-03-31   5687      AST         Seeds       FEE           4567
2018-03-31   5687      AST         Seeds       INT           236
.............
.............

我基本上需要按 Group 和 Date 列取消堆叠金额以创建类似的内容:

ID      Name     Category   INT_2018-02  INT_2018-03   FEE_2018-02  FEE_2018-03
123      ABC         Fruits     22345        790       
456      JFGT        Veg                                   56789  35637 
5687     AST         Seeds                                 4567    4567
5687     AST         Seeds      236      236
.............
.............

它本质上是一个unstack。 我可以通过

对 Group 进行正常的unstack
 df = df.set_index(['Date','ID','Name','Category','Group'])['Amount'].unstack().reset_index()

但是,我不确定如何使用 Date 或将两列用于 unstack 方法。 请指教。

【问题讨论】:

  • 如何连接GroupDate,使新列成为索引,然后取消堆叠?
  • 这是个不错的选择,我怎么没想到:)
  • 其实,你需要的是pivot,而不是unstack。我会发布它作为答案。

标签: python pandas multi-level


【解决方案1】:

添加新列:

df["GD"] = df["Group"] + "_" + df["Date"]

围绕新列旋转 DF:

result = df[["ID", "Name", "Category"]]\
        .join(df.pivot(None, "GD", "Amount"))\
        .fillna(" ") # The last line is not necessary
#     ID  Name Category FEE_2018-02-28 INT_2018-02-28
#0   123   ABC   Fruits                         22345
#1   456  JFGT      Veg          56789               
#2  5687   AST    Seeds           4567               
#3  5687   AST    Seeds                           236

【讨论】:

  • Unstack 给了我同样的东西。我在这里错过了什么吗?
  • unstack 应该给你一个列 MultiIndex。如果您对此没问题,请使用 unstack。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-29
  • 1970-01-01
  • 1970-01-01
  • 2016-02-27
  • 2017-06-20
  • 1970-01-01
相关资源
最近更新 更多