我有许多显微镜载玻片的实验数据。对于每张幻灯片,我拍摄了许多照片,在每张照片上我都有许多标本。我想知道我为每张幻灯片展示了许多标本:
例如:在幻灯片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
我可以找到答案的一部分,但这不是我需要的,因为我仍然需要为每张幻灯片添加样本编号:
df.groupby(['Slide','Image']).max()
答案 0 :(得分:2)
groupby功能允许您实际上" pivot"结果就像你在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
答案 1 :(得分:1)
您可以为每个Specimen
获取.nunique()
.groupby(['Slide', 'Image')
,如下所示:
uniques = df.groupby(['Slide', 'Image'])['Specimen'].nunique()
然后您可以为每张幻灯片.sum()
:
uniques.groupby(level='Slide').sum()
得到:
Slide
0 4
9 2