2016-06-14 6 views
3

私はいくつかの顕微鏡スライドの実験データを持っています。スライドごとに私はいくつかの写真画像を撮影しており、それぞれの画像に多数の標本があります。観測値を追加してデータフレームの行を減らす

例:

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 

:スライド0で、私は合計(画像1で3、画像2の1)の4つの標本を持って各スライドのために私は私が持っているショーの多くの標本を知りたいのですが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

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 

あなたは、あなたが最後に1 GROUPBYを使用することができますスライドによる値のちょうど合計を検索する場合:

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

ほぼそこに! slide0に4つの標本があり、スライド9に2つの標本があるという答えを私に与えるために、各スライドの標本数をどのようにSUMにするのですか? – thescoop

+0

最後のビットを含めるように編集しました。 @thescoop –

1

あなたは、各.groupby(['Slide', 'Image')とても似ため.nunique()Specimenを得ることができます

Slide 
0 4 
9 2 
+0

私はOPは申し訳ありませんが、非常に明確ではないことを参照してください!元のデータフレームにおいて、標本値は標本識別子を指し、標本数ではない。したがって、slide0 image1には3つの標本(標本1,2,3)があり、スライド0にはimage2に1つの標本(データフレームでは標本1)があります。ですから、slide0については、slide0で撮影したすべての画像について、合計で標本数を参照して「4」の値を自動的に取得したいと思います。これが質問を明確にすることを願っていますか? – thescoop

関連する問題