为Plotly中的多级Sankey设置Pandas数据格式:源列和目标列

2024-03-29 05:18:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有关于学生所修课程顺序的数据,我想用Sankey图表示班级之间的流程。我的数据是长格式的Pandas数据帧,其中某人执行的每个步骤都有一行,这些步骤的顺序由一列order指定:

^{tb1}$

我旋转此表以将其聚合为序列,并计算每个序列的计数:

^{tb2}$

请注意,我希望保留End值,但如果这会导致问题,我很乐意放弃它,让人们停下脚步

在Plotly中构建Sankey需要具有源和目标的数据格式。以下是Plotly文档上的示例

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

我需要将我的数据转换为上述格式,但要转换为我的整个数据帧。

如果我在处理一个小数据集,比如上面的玩具数据集,我可以手动创建它。但是,我有一个包含数千行的数据帧,我不知道如何在熊猫中实现这一点。这看起来像是某种窗口计算,但我不知道怎么做

我也有点困惑如何创建编码方案,因为我失败的尝试创建了一个没有四个课程序列的viz

非常感谢您的帮助

玩具数据:

student = ['Jerry','Jerry','Jerry','Jessy','Jessy','Jessy','Raphael','Raphael','Raphael','Raphael','Sally','Sally','Sally']
course = ['A','B','C','C','A','B','A','C','C','B','A','B','C']
order = [1,2,np.NaN,1,2,3,1,2,3,4,1,2,np.NaN]
df = pd.DataFrame({'student':student, 'course':course,'order':order})

Tags: 数据顺序格式步骤order序列plotlystudent