2016-06-14 109 views
3

我有許多顯微鏡幻燈片的實驗數據。對於每張幻燈片,我都拍攝了許多照片圖像,每張圖片上都有一些樣本。我想知道節目很多標本,我爲每個幻燈片:通過添加觀察值來減少數據幀的行數

如:幻燈片0,我有四個標本總(三個圖像1,一個圖像2):

from pandas import DataFrame, Series 
import seaborn as sns 

data = {'Slide' :  [0,0,0,0,0,0,0,0,0, 0,0,0, 9,9,], 
     'Image' :  [1,1,1,1,1,1,1,1,1, 2,2,2, 1,7], 
     'Specimen' : [1,1,1,1,2,2,3,3,3, 1,1,1, 1,1], 
     'Foci' :  [8,9,7,9,6,9,7,9,6, 6,7,6, 9,6]} 

df = DataFrame(data, columns=['Slide','Image','Specimen','Foci']) 
df 

enter image description here

我可以得到一部分的方式來回答,但這並不完全是我所需要的,因爲我還需要加起來樣本數爲每張幻燈片:

df.groupby(['Slide','Image']).max() 

enter image description here

回答

2

的GROUPBY功能允許您基本上是「支點」的結果就像你在Excel會:

df = df.groupby(['Slide','Image']).Specimen.nunique() 

的.nunique()函數會給你每幅圖像每張幻燈片的唯一值的數量。然後,您可以在此係列中使用.reset_index()將其轉換回數據框。

df.reset_index(inplace=True) 

df 
    Slide Image Specimen 
0 0  1  3 
1 0  2  1 
2 9  1  1 
3 9  7  1 

如果你再想要滑找到值的簡單相加,你可以使用一個最終GROUPBY:

df = df.groupby('Slide').sum()['Specimen'] 
df 
Slide 
0 4 
9 2 
+0

差不多有!那麼我將如何總結每張幻燈片的樣本數量,以給出答案,slide0有四個樣本,幻燈片9有兩個樣本? – thescoop

+0

剛剛編輯以包含最後一位。 @thescoop –

1

你可以得到.nunique()Specimen每個.groupby(['Slide', 'Image')像這樣:

uniques = df.groupby(['Slide', 'Image'])['Specimen'].nunique() 

然後你就可以.sum()每張幻燈片:

uniques.groupby(level='Slide').sum() 

獲得:

Slide 
0 4 
9 2 
+0

我看到我的OP不是很清楚,對不起!在原始數據框中,樣本值是指樣本標識符,而不是樣本數量。因此,slide0 image1有三個樣本(樣本1,2和3),而幻燈片0 image2有一個樣本(在數據框中標識爲樣本1)。因此,對於slide0,我希望自動獲取「4」的值,參考Slide0中所有拍攝的圖像的總數。我希望這能澄清這個問題?! – thescoop

相關問題