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

问题描述

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

学生 课程 顺序
杰瑞 A 1
杰瑞 B 2
杰瑞 C NaN
杰西 C 1
杰西 A 2
杰西 B 3
拉斐尔 A 1
拉斐尔 C 2
拉斐尔 C 3
拉斐尔 B 4
莎莉 A 1
莎莉 B 2
莎莉 C NaN

我旋转了这个表,将它聚合成带有每个序列计数的序列:

课程1 课程2 课程3 课程4 计数
A B 结束 结束 2
A C C B 1
C A B 结束 1

请注意,我想保留 End 值,但如果这会导致问题,我很乐意放弃它并让人们停下来。

在 Plotly 中构建 Sankey 需要包含源和目标的数据格式。这是 Plotly 文档中的示例。

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

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

如果我正在处理一个小数据集,比如上面的玩具,我可以手动创建它。但是,我有一个包含数千行的数据框,我不知道如何在 Pandas 中执行此操作。看起来像是某种窗口计算,但我不知道该怎么做。

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

非常感谢任何帮助。

玩具数据:

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...