- 帖子
- 5
- 精华
- 0
- 积分
- 25
- 阅读权限
- 10
- 注册时间
- 2018-8-13
- 最后登录
- 2018-12-29
|
数据格式如下:
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
我的代码如下:
- df = pd.read_csv('region.txt',sep='\t')
- def calculate_diff(df):
- diff = []
- diff.append(0)
- indexs = list(df.index)
- for i in range(indexs[1],indexs[-1]):
- d = df.iloc[i,1] - df.iloc[i-1,2]
- diff.append(d)
- DIFF = pd.DataFrame(diff,columns=['diff'])
- df1 = pd.concat([df,DIFF],axis=1)
- return(df1)
- df.groupby('chr').apply(calculate_diff)
[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
这是索引出问题了?没想通到底是哪一步错了,有大神有空指点一下吗?是代码的问题还是我的这个思路就是错的
|
|