2017-12-17 22 views
0

私のデータフレームの列 'which_AOI'(0〜9の範囲)に関心のある領域を数えたいと思います。私は、1つの「画像」が終了し、次の画像が始まるときを教えてくれる変数 'マーカー'(0〜xの範囲)に応じて、データフレームに結果を追加して新しい列を作りたいと思います可変長の行)。これはこれまでの私のコードですが、出力が出ることなく立ち往生して走っているようです。私は最初から再構築しようとしましたが、 'if df.marker == num'になるとすぐに停止しません。私は何が欠けていますか? (以下の例のデータフレーム)パンダのループでデータフレームを検索してリストを更新する

## 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'が1倍、 '7'が画像に4回発生するなど) 0と2×写真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

ありがとうございました。そのソリューションは完璧に機能しました。私はあなたがそのようなグループバイを使うことができるのか分からなかった。 – ktk

関連する問題