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

この投稿で示唆されているように、私はそれを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")

それは私には非常にハッキーなようで、おそらくパンダでこれを行うためのより良い方法があります。これはどのように達成できますか?

4

1 に答える 1

4

groupbyこれを明確かつ簡潔にするために必要なものが判明しました(そしておそらくより効率的でもあります):

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

if counts.size != 1:
    raise ValueError("Detectors not equal for all samples")
于 2012-10-22T14:27:45.883 に答える