2016-06-14 4 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() 
각 슬라이드 .sum()를 수 그리고

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

:

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

이 얻을 :

enter image description here

답변

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

.nunique() 함수는 당신에게 슬라이드 당 이미지 당 고유 값의 수를 줄 것이다 :GROUPBY 기능은 본질적으로 "피벗"결과는 엑셀에서와 같이이 있습니다. 그런 다음이 시리즈에서 .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에 4 개의 표본이 있고 슬라이드 9에 2 개의 표본이 있다는 대답을 내리기 위해 각 슬라이드의 표본 수를 어떻게 합산합니까? – thescoop

+0

마지막 비트가 포함되도록 편집되었습니다. @thescoop –

1

.groupby(['Slide', 'Image')과 같이의 .nunique()Specimen를 얻을 수 있습니다

Slide 
0 4 
9 2 
+0

내 영업 이익은 매우 명확하지 않습니다 볼을! 원본 데이터 프레임에서 표본 값은 표본 식별자를 나타내며 표본 수는 아닙니다. 따라서 slide0 image1에는 세 개의 표본 (표본 1, 표본 2 및 표본 3)이 있고 slide 0에는 image2에 표본 1 (표본 1)이 있습니다. 그래서 slide0에 대해 slide0에서 찍은 모든 이미지에 대해 총 표본 수를 나타내는 "4"값을 자동으로 얻고 싶습니다. 이 질문을 분명히 희망?! – thescoop

관련 문제