【发布时间】:2019-11-14 15:19:03
【问题描述】:
我有一个如下所示的数据框:
当前数据帧
Branch ID | Dispense Type | Product ID | Date | Quantity
-------------------------------------------------------------
A | Shipped Out | ABC3 | 5/6/19 | 10
A | Received | ABC3 | 5/6/19 | 8
A | Transferred | ABC3 | 5/6/19 | 0
A | Shipped Out | ABC3 | 5/7/19 | 5
A | Received | ABC3 | 5/7/19 | 7
A | Transferred | ABC3 | 5/7/19 | 20
B | Shipped Out | ABC3 | 5/6/19 | 40
B | Received | ABC3 | 5/6/19 | 0
B | Transferred | ABC3 | 5/6/19 | 1
B | Shipped Out | ABC3 | 5/7/19 | 6
B | Received | ABC3 | 5/7/19 | 2
B | Transferred | ABC3 | 5/7/19 | 3
A | Shipped Out | QRE3 | 5/6/19 | 7
A | Transferred | QRE3 | 5/6/19 | 10
A | Received | QRE3 | 5/6/19 | 5
(此处包含行之间的空格只是为了使数据框清晰且有意义,我的代码中生成的实际数据框中不需要空格。)
理想情况下,我希望作为最终结果的 Dataframe 将使用“分配类型”列来创建额外的列,从而减少行数。
期望的结果数据框
Branch ID | Date | Product ID | Shipped Out | Received | Transferred
------------------------------------------------------------------------
A | 5/6/19 | ABC3 | 10 | 8 | 0
A | 5/7/19 | ABC3 | 5 | 7 | 20
B | 5/6/19 | ABC3 | 40 | 0 | 1
B | 5/7/19 | ABC3 | 6 | 2 | 3
A | 5/6/19 | QRE3 | 7 | 10 | 5
一个 Branch 可以运送两种不同的产品,这就解释了为什么在原始数据帧和结果数据帧中有两个不同的 A 块(具有不同的产品 ID)。
我尝试使用数据透视表,但发生的情况是,当“发货”一列有值时,其他两列的值为 NaN。所以只有一列有值,而另外两列将用 Null 填充。
注意:我知道这类似于“如何旋转数据框”问题,但是在阅读并尝试了某些方法之后,我只是遇到了错误并且不确定哪种策略会起作用。
【问题讨论】:
-
如果您将输入数据格式化为有人可以直接从中创建 DataFrame 的代码,或者粘贴可以使用 pandas 轻松解释的 juputer notebook 会话的输出,您可能会得到更多响应。读剪贴板。另外,为什么两个 Dataframe 中的产品 ID 不同?
-
试试
unstack:df.set_index(list(df.columns[:-1])).Quantity.unstack('Dispense Type')
标签: python pandas dataframe pivot pivot-table