通过添加观察值来减少数据帧的行数

通过添加观察值来减少数据帧的行数

问题描述:

我有许多显微镜幻灯片的实验数据。对于每张幻灯片,我都拍摄了许多照片图像,每张图片上都有一些样本。我想知道节目很多标本,我为每个幻灯片:通过添加观察值来减少数据帧的行数

如:幻灯片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

的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 –

你可以得到.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