我正在尝试使用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
结构中,而该结构是我上面具有的数据框中必不可少的。
答案 0 :(得分:0)
假设您的链接应类似于:
label = [
"Week 1 - Bucket 1",
"Week 1 - Bucket 2",
"Week 1 - Bucket 3",
"Week 2 - Bucket 1",
...
]
然后source
和target
(从源标签到目标标签索引的流)原则上是:
source = [0, 0, 0, 1, 1, 1, 2, 2, 2, ...]
target = [3, 4, 5, 3, 4, 5, 3, 4, 5, ...]
最后一位是计算链接中的权重。为此,您可以使用group_by
中的agg
和pandas
:
value = df.groupby(['Week', 'Sales Bucket'])['Id'].agg('sum').values.flatten()