2017-12-17 4 views
0

내 데이터 프레임 열 'which_AOI'(0-9 범위)의 관심 영역을 계산하고 싶습니다. 나는 하나의 '그림'이 완료되고 다음이 시작될 때 알려주는 변수 '마커'(0 - x에 이르기까지)에 따라 데이터 프레임에 결과가 추가 된 새로운 컬럼을 원합니다 (하나의 마커는 가변 길이의 행). 이것은 지금까지 내 코드입니다. 그러나 출력이 없어지지 않고 계속 실행되는 것 같습니다. 나는 처음부터 재구성을 시도했지만 'if df.marker == num'이되면 즉시 멈추지 않습니다. 내가 뭘 놓치고 있니? (아래 예 dataframe)for pandas for loop for pandas

## AOI count of spec. type function (in progress): 
import numpy as np 
import pandas as pd 

path_i = "/Users/Desktop/Pilot/results/gazedata_filename.csv" 
df = pd.read_csv(path_i, sep =",") 

#create a new dataframe for AOIs: 

d = {'marker': []} 
df_aoi = pd.DataFrame(data=d) 

### Creating an Aoi list 
item = df.which_AOI 
aoi = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] #list for search 
aoi_array = [0, 0 , 0, 0, 0, 0, 0, 0, 0, 0] #list for filling 
num = 0 

for i in range (0, len (df.marker)): #loop through the dataframe 
    if df.marker == num: ## if marker = num its one picture 
     for index, item in enumerate(aoi): #look for item (being a number in which_AOI) in aoi list 
      if (item == aoi[index]): 
       aoi_array[index] += 1 
     print (aoi) 
     print (aoi_array) 
     se = pd.Series(aoi_array) # make list into a series to attach to dataframe 
     df_aoi['new_col'] = se.values #add list to dataframe 
     aoi_array.clear() #clears list before next picture 
    else: 
     num +=1 



index  pos_time  pos_x  pos_y  pup_time pup_diameter marker which_AOI fixation Picname shock 
1 16300 168.608779907227 -136.360855102539 16300 2.935715675354  0  7    18  5 save 
2 16318 144.97673034668 -157.495513916016 16318 3.08838820457459  0  8   33  5 save 
3 16351 152.92560577392598 -156.64172363281298 16351 3.0895299911499  0  7    17  5 save 
4 16368 152.132453918457 -157.989685058594 16368 3.111008644104  0  7    18  5 save 
5 16386 151.59835815429702 -157.55587768554702 16386 3.09514689445496 0  7    18 5 save 
6 16404 150.88092803955098 -152.69479370117202 16404 3.10009074211121 1  7    37 5 save 
7 16441 152.76554107666 -142.06188964843798 16441 3.0821495056152304  1  7    33 5 save 
+0

방금 ​​다른 컬럼의 값에 따라 열을 추가하려고 ? 일반적으로 데이터 프레임을 루프 할 필요가 없습니다. 또한 .csv 파일의 샘플을 첨부 할 수 있습니까? – jjj

+1

@jjj 필자는 가능한 한 데이터 프레임 샘플을 첨부했습니다 (의학 연구의 데이터 부분). 마커가 필요합니다 (그림 0 또는 1 또는 2) 그리고 각 그림에 대해 개별적으로 이벤트 수를 계산하려고합니다 (예 : '8'이 1x 발생, '7'이 그림에서 4 회 발생 함). 0 및 2 x 그림 1). 이 계산 목록은 나중의 분석을 위해 새로운 결과 데이터 프레임에 첨부하고 싶었습니다. 나는 이것에 아주 새롭다. 그래서 이것에 쉬운 방법이 나에 의하여 매우 강요 될 것입니다지면. – ktk

답변

0

100 %는 일반 질문을 기반으로하지만, 각 마커의 각 which_AOI 값의 행의 수를 계산하려는 것 같은데.

pos_time  pos_x  pos_y pup_time pup_diameter marker \ 
0  16300 168.608780 -136.360855  16300  2.935716  0 
1  16318 144.976730 -157.495514  16318  3.088388  0 
2  16351 152.925606 -156.641724  16351  3.089530  0 
3  16368 152.132454 -157.989685  16368  3.111009  0 
4  16386 151.598358 -157.555878  16386  3.095147  0 
5  16404 150.880928 -152.694794  16404  3.100091  1 
6  16441 152.765541 -142.061890  16441  3.082150  1 

    which_AOI fixation Picname shock 
0   7  18  5 save 
1   8  33  5 save 
2   7  17  5 save 
3   7  18  5 save 
4   7  18  5 save 
5   7  37  5 save 
6   7  33  5 save 

아웃 :

당신은에서 groupby

df_aoi = df.groupby(['marker','which_AOI']).size().unstack('which_AOI',fill_value=0) 

를 사용하여이 작업을 수행 할 수

which_AOI 7 8 
marker   
0   4 1 
1   2 0 
+0

감사합니다.이 솔루션은 완벽하게 작동했습니다. 나는 당신이 그런 식으로 groupby를 사용할 수 있는지 몰랐다. – ktk