Crossin的编程教室

标题: [求助]pandas groupby分组运行自定义函数报错 [打印本页]

作者: elaine2018    时间: 2018-12-27 16:08
标题: [求助]pandas groupby分组运行自定义函数报错
数据格式如下:
chr        start        end        length        site_num        depth        average
chr1        960502.0        960511.0        10.0        5        149.73        0.36
chr1        960604.0        960615.0        12.0        5        161.35        0.41
chr1        960979.0        960989.0        11.0        6        125.27        0.39
chr1        966821.0        966853.0        33.0        5        120.52        0.34
chr2        73177247.0        73177263.0        17.0        5        156.44        0.3
chr2        73233256.0        73233292.0        37.0        14        196.06        0.3
chr2        73233298.0        73233381.0        84.0        9        197.13        0.28
chr2        73234132.0        73234164.0        33.0        5        15.88        0.0
chr2        73234212.0        73234246.0        35.0        5        16.12        0.02

我的目的是按照第一列chr分组,相同的为一组,我想要在后面增加一列diff,其值是从第二行开始,每一行的第二列减上一行的第三列,因此每个组的第一行的diff值应该为0,理论上我的结果应该如下:
chr        start        end        length        site_num        depth        average        diff
chr1        960502        960511        10        5        149.73        0.36        0
chr1        960604        960615        12        5        161.35        0.41        93
chr1        960979        960989        11        6        125.27        0.39        364
chr1        966821        966853        33        5        120.52        0.34        5832
chr2        73177247        73177263        17        5        156.44        0.3        0
chr2        73233256        73233292        37        14        196.06        0.3        55993
chr2        73233298        73233381        84        9        197.13        0.28        6
chr2        73234132        73234164        33        5        15.88        0        751
chr2        73234212        73234246        35        5        16.12        0.02        48

我的代码如下:

[color=rgb(51, 102, 153) !important]复制代码



考虑到groupby分组之后每个组的索引并不都是从0开始,所以我先把索引取出来形成一列表,但是运行的时候出现以下错误

  File "F:\Anaconda\lib\site-packages\pandas\core\indexing.py", line 1638, in _is_valid_integer
    raise IndexError("single positional indexer is out-of-bounds")

IndexError: single positional indexer is out-of-bounds

这是索引出问题了?没想通到底是哪一步错了,有大神有空指点一下吗?是代码的问题还是我的这个思路就是错的

作者: crossin先生    时间: 2018-12-28 15:50
你贴的报错不完整,没有贴出是哪一行代码报错的
看报错是索引越界
你自己对照报错提示的行数,然后看那一行里哪里用到的index,具体的值和对应列表都输出出来,应该就能看出是哪里出问题了

对于你这个需求,如果已经是按chr顺序排列的数据,似乎完全不用分组,只要每一行和上一行比较,比较的时候顺便判断下chr是否相等,相等就是差值,不相等就是0,就可以了




欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5