【发布时间】:2014-11-29 01:23:31
【问题描述】:
我刚开始使用 Python,因为我是一位经验丰富的 R 用户,我发现 PANDAS 适合以下情况。我试图描述清楚,所以
情况是:
- 带有列名和行名的大型数据框(用 0 填充)(尺寸 85558 x 85558)
- 制表符分隔文件。
我的问题:
- ¿如果成功比较(列名和行名)中包含的信息与解析文件的每一行中存在的标志,如何有效地迭代数据帧的每个单元格并填充计数?
我已经有一个函数可以比较行名/列名与标志。因此,假设一旦实现了对每个单元格的有效访问,就调用函数(例如 compare_and_count()),将 colnames 和 rownames 解析为参数,并返回或不返回计数。从逻辑上讲,计数将添加到数据框单元格中,如果存在先前的计数,则将其相加。
这里的附加信息是数据框的预览:
chr6:0-2000 chr6:2000-4000 chr6:4000-6000 chr6:6000-8000 ... chr6:171114000-171115067
chr6:0-2000 0 0 0 0 ... 0
chr6:2000-4000 0 0 0 0 ... 0
chr6:4000-6000 0 0 0 0 ... 0
… … … … … …
chr6:171110000-171112000 0 0 0 0 ... 0
chr6:171112000-171114000 0 0 0 0 ... 0
chr6:171114000-171115067 0 0 0 0 ... 0
我试图不重复已经回答的问题,我认为这具有特殊性,即一个大型数据框,必须仔细考虑有关行名和列名的信息。
感谢所有可以将知识添加到答案中的人!
最好的!
---------- 编辑 --------
作为补充说明,因为这里的 cmets 建议的是我的典型输入和所需的输出:
输入由一系列由线条分隔的分组坐标组成。每一行都必须彼此分开处理:
Ids CHR-1 START-1 CHR-2 START-2
id1 chr6 1 chr6 100
id2 chr6 1995 chr6 2200
id3 chr6 2300 chr6 2500
id4 chr6 3300 chr6 3500
id5 chr6 3447 chr6 3658
id6 chr6 5000 chr6 5100
id7 chr6 5050 chr6 5150
id8 chr6 6000 chr6 6100
正如您在第一个 Dataframe 中看到的,有一堆坐标作为行名和列名。然后,目标是从大数据框中的文件映射线分组坐标。例如如下坐标:
id1 chr6 1 chr6 100
只应计入 cell[1,1],因为 start-1 和 start-2 介于 0-2000 之间。但是,下一个坐标:
id2 chr6 1995 chr6 2200
只应计入 cell[1,2],因为 start-1 在 0-2000 之间 BUT start-2 在 2000-4000 之间。
最终输出将是在数据框中映射的分组坐标的矩阵:
chr6:0-2000 chr6:2000-4000 chr6:4000-6000 chr6:6000-8000 ... chr6:171114000-171115067
chr6:0-2000 1 2 0 0 ... 0
chr6:2000-4000 0 1 0 0 ... 0
chr6:4000-6000 0 0 1 0 ... 0
… … … … … …
chr6:171110000-171112000 0 0 0 0 ... 0
chr6:171112000-171114000 0 0 0 0 ... 0
chr6:171114000-171115067 0 0 0 0 ... 0
正如您可以指出的,对于本示例,我没有考虑同一行中是否有不同的 ID,因此可以通过 if/else 语句与稍微不同的 Dataframe 的组合来解决问题。我主要担心的是使用尽可能短的时间进行迭代和计数。
这是否说明了情况? 谢谢!
【问题讨论】:
-
您能否添加输入(DataFrame + 文件)和所需输出的简单示例?一些小的东西,比如 5x6 DataFrame,只是为了了解你想要做什么