具有MultiIndex的Pandas DataFrame:检查其中一个索引中的重复元素的有效方法

时间:2012-10-22 14:17:47

标签: python pandas data-analysis

我正在使用这样的数据:

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中所建议的那样,我正在用MultiIndex处理它。但是,我想知道如何通过这样的结构进行一些额外的检查。让我们更好地解释一下:每个“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")

对我而言似乎非常讨厌,并且可能有更好的方法在熊猫中做到这一点。怎么能实现呢?

1 个答案:

答案 0 :(得分:4)

结果显示groupby是使这一点变得清晰简洁(也可能更有效)所需要的:

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

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