2012-10-22 69 views
2

我使用數據像這樣的一個檢查重複元素的有效途徑:熊貓數據框中用多指標:在指數

Sample Detector  Cq 
P_1 106 23.53152 
P_1 106 23.152458 
P_1 106 23.685083 
P_1 135  24.465698 
P_1 135  23.86892 
P_1 135  23.723469 
P_1 17 22.524242 
P_1 17 20.658733 
P_1 17 21.146122 

正如this post建議,我在處理這一個多指標。但是,我想知道如何用這樣的結構做一些額外的檢查。讓我們來更好地解釋一下:每個「Sample」列都有固定數量的重複「Detector」元素,從1(不重複)到多個重複元素。我希望確保每個樣本元素的檢測器數量始終相同(即如果P_1具有3個「106」檢測器,則P_2也應具有3個「106」檢測器)。

目前我寧願粗製濫造這樣做:

def replicate_counter(dataframe, name): 
    subset = dataframe.ix[name] 
    num_replicates = subset.index.size/subset.index.unique().size 
    return num_replicates 

# Further down... 
# dataframe is a MultiIndex DataFrame like above 
counts = pandas.Series([replicate_counter(dataframe, item[0]) for item 
         in dataframe.index]).unique() 

if counts.size != 1: 
    raise ValueError("Detectors not equal for all samples") 

似乎很哈克對我來說,可能有更好的方法在大熊貓做到這一點。這怎麼可能完成?

回答

4

原來groupby是需要什麼,使這個簡潔明瞭的(也可能是更有效的太):

counts = dataframe.groupby(level=["Sample", "Detector"]) 
counts = counts.size().unique() 

if counts.size != 1: 
    raise ValueError("Detectors not equal for all samples")