/ / Pandas DataFrame with MultiIndex:いずれかのインデックス(python、pandas、data-analysis)の重複要素をチェックするための効率的な方法

Pandas DataFrame with MultiIndex: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

で提案されているように この郵便受け、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")

それは私にとって非常に厄介なように思えます、そしておそらくパンダでこれをするためのより良い方法があります。これはどのようにして達成できますか?

回答:

回答№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")