2017-11-01 6 views
1

이것은 내가 가지고있는 (3.2GB) 염색체 데이터입니다. 매 2 줄마다, 컬럼 3 (#이 불필요한 부분)을 취한 특정 ID가 있습니다. 나는이 ID들을 텍스트 파일에 썼다. 이제 크기는 1.2GB입니다. 그 Ids.txt 파일에서 하나의 ID를 가져와 염색체 파일에서 두 쌍을 찾고 ID가 0 번째와 1 번째 인 열을 가져와야합니다. 예 : 제가팬더가있는 데이터 프레임에서 데이터를 가져 오는 방법

ID = HWI-ST1113_0139 : 6 : 1309 : 6672 : 91333에 대한 작업을하고 있다고 가정합니다. 6 : 1309 : 6672 chr1 나는 또한 내가 팬더와 NumPy와 새로운임을위한 적절한 알고리즘을 만들 수 없습니다 805329

807003 chr1

결과는

HWI-ST1113_0139 수 있습니다. 내가 그 사람들을 appriciate 수 있도록 도와 드릴 수 있습니다. 고맙습니다.

0 . 1 .  2 .  3 .          
    chr1 42559 42609 HWI-ST216_0359:4:1106:4167:41680#AT.AAG/1 26 - 
    chr1 96644 96694 HWI-ST1113_0139:5:2205:21258:88747#..GGT./1 25 - 
    chr1 228403 228452 HWI-ST1113_0139:5:1115:14469:39910#....../1 19 + 
    chr1 532565 532615 HWI-ST216_0359:4:1313:3216:51668#C.G.C./1 23 - 
    chr1 557412 557462 HWI-ST1113_0139:5:1205:9402:77620#..G.../1 30 - 
    chr1 807003 807051 HWI-ST1113_0139:6:1309:6672:91333#.G...A/1 42 - 
    chr1 805329 805379 HWI-ST1113_0139:6:1309:6672:91333#.G...A/2 26 + 
필터링

답변

3

사용 boolean indexing :

ID = 'HWI-ST1113_0139:6:1309:6672:91333' 
mask = df[3].str.startswith(ID) 

df1 = df.loc[mask, [0, 1, 3]] 
print (df1) 
     0  1           3 
5 chr1 807003 HWI-ST1113_0139:6:1309:6672:91333#.G... 
6 chr1 805329 HWI-ST1113_0139:6:1309:6672:91333#.G...A 

#split by `#` and then remove last 6 chars 
df1[3] = df1[3].str.split('#').str[0].str.rsplit(':', 1).str[0] 
print (df1) 
     0  1       3 
5 chr1 807003 HWI-ST1113_0139:6:1309:6672 
6 chr1 805329 HWI-ST1113_0139:6:1309:6672 

경우에도 하나의 행에 출력 사용 바꿀 원하는 unstack :

df1 = (df1.set_index([3, np.arange(len(df1.index))]) 
      .unstack() 
      .sort_index(axis=1, level=1) 
      .reset_index()) 
df1.columns = range(df1.shape[1]) 
print (df1) 
          0  1  2  3  4 
0 HWI-ST1113_0139:6:1309:6672 chr1 807003 chr1 805329 
관련 문제