【问题标题】:Pandas DataFrame with MultiIndex: efficient way of checking duplicate elements in one of the indices带有 MultiIndex 的 Pandas DataFrame:检查索引之一中重复元素的有效方法
【发布时间】:2012-10-22 22:27:45
【问题描述】:

我正在处理这样的数据:

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 来处理它。但是,我想知道如何使用这样的结构进行一些额外的检查。让我们更好地解释一下:每个“样本”列都有固定数量的重复“检测器”元素,从 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")

对我来说这似乎很 hacky,可能在 pandas 中有更好的方法来做到这一点。这怎么可能实现?

【问题讨论】:

    标签: python pandas data-analysis


    【解决方案1】:

    事实证明,groupby 是使这一点清晰简洁(并且可能更有效)所需要的:

    counts = dataframe.groupby(level=["Sample", "Detector"])
    counts = counts.size().unique()
    
    if counts.size != 1:
        raise ValueError("Detectors not equal for all samples")
    

    【讨论】:

      猜你喜欢
      • 2017-10-12
      • 2018-12-21
      • 1970-01-01
      • 2018-07-26
      • 2018-12-18
      • 2022-08-09
      • 2016-02-04
      • 2013-02-04
      相关资源
      最近更新 更多