【发布时间】:2021-12-29 22:40:02
【问题描述】:
我有一个数据框
sample1 0 0 0 0 0 1 1 1 1 1 1 1 1 L1
sample2 0 0 0 0 0 1 1 1 1 1 0 0 0 L1-1
sample3 0 0 0 0 0 1 1 0 0 0 0 0 0 L1-1-1
sample4 0 0 0 0 0 1 0 0 0 0 0 0 0 L1-1-1-1
sample5 0 0 0 0 0 0 0 1 1 0 0 0 0 L1-1-2
sample6 0 0 0 0 0 0 0 1 0 0 0 0 0 L1-1-2-1
sample7 0 0 0 0 0 0 0 0 0 1 0 0 0 L1-1-3
sample8 0 0 0 0 0 0 0 0 0 0 1 1 1 L1-2
sample9 0 0 0 0 0 0 0 0 0 0 1 1 0 L1-2-1
sample10 0 0 0 0 0 0 0 0 0 0 0 0 1 L1-2-2
sample11 1 1 1 1 1 0 0 0 0 0 0 0 0 L2
sample12 1 1 1 0 0 0 0 0 0 0 0 0 0 L2-1
sample13 1 1 0 0 0 0 0 0 0 0 0 0 0 L2-1-1
sample14 1 0 0 0 0 0 0 0 0 0 0 0 0 L2-1-1-1
sample15 0 0 0 1 0 0 0 0 0 0 0 0 0 L2-2
sample16 0 0 0 0 1 0 0 0 0 0 0 0 0 L2-3
如您所见,每一行都是聚集在一起的。
我想为每个样本命名“基于血统”的标签。
例如,sample1 将是 lin1,因为它首先出现,sample2 将是 lin1-1。
Sample3 将是 lin1-1-1,sample4 将是 lin1-1-1-1。
接下来,sample5 将是 lin1-2,sample6 将是 lin1-2-1...
Sample11 将是血统 lin2 的新起点。
我最初的命名想法是。
"sample1 为 lin1,如果下一个样本包含在前一个样本中,则 lin1 + "-1" 如果没有,则 lin(1+1)"
sample1 -> lin1
sample2 -> lin1-1(sample2 包含在 sample1 中)
sample3 -> lin1-1-1(sample3 包含在 sample2 中)
sample4 -> lin1-1-1-1(sample4包含在sample3中)
sample5 -> lin1-1-2(sample5 不包含在 sample4 中) ....这样的逻辑。
我无法将这个逻辑写成 python 脚本。
【问题讨论】:
-
您能否展示一下您的最终预期结果(从 sample1 到 sample16)?
-
@jasonwong 我已在数据框中添加了该信息,谢谢
标签: python dataframe hierarchical-clustering data-lineage