不了解如何在Sankey图中绘制数据框

时间:2019-06-24 22:16:33

标签: python pandas plotly sankey-diagram

我正在尝试使用plotly绘制一个有关我的客户每周如何在销售时段之间移动的sankey图。现在,我的数据框如下所示:

account_id |    week    | sales_bucket
     1     | 2019-06-10 |   $0-20
     1     | 2019-06-17 |   $21-40
     1     | 2019-06-24 |   $0-20
     2     | 2019-06-10 |   $40-60
     2     | 2019-06-17 |   $40-60
     3     | 2019-06-17 |   $60-80
     4     | 2019-06-10 |   $40-60

本质上,我想跟踪客户是否每周都进入更高的层次。但是,并不是每个客户每周都会进行交易,当然每周也有新客户。我无法确定如何快速将数据框放入source-sink-count结构中,而该结构是我上面具有的数据框中必不可少的。

1 个答案:

答案 0 :(得分:0)

假设您的链接应类似于:

label = [
  "Week 1 - Bucket 1", 
  "Week 1 - Bucket 2", 
  "Week 1 - Bucket 3", 
  "Week 2 - Bucket 1", 
  ...
  ]

然后sourcetarget(从源标签到目标标签索引的流)原则上是:

source = [0, 0, 0, 1, 1, 1, 2, 2, 2, ...]
target = [3, 4, 5, 3, 4, 5, 3, 4, 5, ...]

最后一位是计算链接中的权重。为此,您可以使用group_by中的aggpandas

value = df.groupby(['Week', 'Sales Bucket'])['Id'].agg('sum').values.flatten()