首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫有效的大数据迭代?

熊猫有效的大数据迭代?
EN

Stack Overflow用户
提问于 2014-11-28 12:47:18
回答 1查看 242关注 0票数 0

我刚开始使用Python,因为我是一个有经验的R用户,我发现熊猫适合下面的情况。我试着把它描述清楚,所以

情况是:

  • 用冒号和行名填充的大型数据帧(尺寸85558 x 85558)
  • 制表符分隔的文件。

我的问题是:

  • 如果在解析的文件的每一行中包含的信息(冒号和行名)与当前的标志之间进行了成功的比较,那么如何有效地迭代数据的每个单元格,并填充计数?

我已经有了一个比较行名/冒号和标志的函数。因此,假设一旦实现了对每个单元的有效访问,就调用函数(i.ex )。compare_and_count()),将冒号和行名解析为参数,并返回计数或不返回。从逻辑上讲,计数将添加到dataframe单元格中,如果存在以前的计数,则将对其进行加和。

正如这里提供的其他信息一样,也是对dataframe的预览:

代码语言:javascript
复制
    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

我试图不去回答已经回答的问题,我认为这是一个很大的数据格式,必须仔细考虑行名和冒号的信息。

我感谢每一个能把它的知识添加到答案中的人!

最好的!

-编辑

作为额外的解释,因为这里的注释所建议的是我的典型输入和期望的输出:

输入由一系列由行分隔的分组坐标组成。每一行必须分别对待:

代码语言:javascript
复制
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中看到的,有一组坐标作为行名和冒号。因此,目标是映射大数据中文件中的线分组坐标。例如,以下坐标:

代码语言:javascript
复制
id1 chr6    1   chr6    100

应该只在单元1,1中计算,因为start-1和start-2在0-2000之间。然而,下一个坐标是:

代码语言:javascript
复制
id2 chr6    1995    chr6    2200

应该只在单元1,2中计算,因为start-1在0-2000 之间,而 start-2在2000-4000年之间。

最后的输出将是在dataframe中映射成组坐标的矩阵:

代码语言:javascript
复制
    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

正如您可以表示的,在这个示例中,如果同一行中有不同的is,则不考虑这一点,因此可以使用if/else语句和稍微不同的Dataframe组合来解决这个问题。我主要担心的是迭代&使用尽可能短的时间进行计数。

这是否澄清了情况?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2014-11-28 16:33:17

我有点不明白为什么您有CHR-1CHR-2列,它们似乎没有添加任何内容。下面是我的例子DataFrame

代码语言:javascript
复制
df = pandas.DataFrame([[500, 200], [600,1100], [500, 2200]], columns=['a','b'])

>>> df
     a     b
0  500   200
1  600  1100
2  500  2200

您希望按2000的倍数存储元素,因此:

代码语言:javascript
复制
df /= 2000
>>> df
   a  b
0  0  0
1  0  0
2  0  1

现在我们可以看到,cell[0,0]应该有两个计数,cell[0,1]应该有一个计数。我们使用groupby方法完成这一任务,并使用count作为聚合器:

代码语言:javascript
复制
c = df.groupby(['a','b']).size()
>>> c
a  b
0  0    2
   1    1

现在,我们可以通过以下方法获得一个单元格的计数:

代码语言:javascript
复制
>>> c.loc[0,0]
2
>>> c.loc[0,1]
1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27189014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档