/ / Pandas DataFrame s MultiIndex: účinný spôsob kontroly duplicitných prvkov v jednom z indexov - python, panda, analýza dát

Pandas DataFrame s MultiIndex: účinný spôsob kontroly duplicitných prvkov v jednom z indexov - python, panda, analýza dát

Pracujem s takými údajmi:

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

Ako bolo navrhnuté v tento príspevok, Ja to zvládnem s MultiIndexom. Napriek tomu sa zaujímam, ako s takouto štruktúrou urobiť dodatočné kontroly. Vysvetlite lepšie: každý stĺpec "Vzorka" obsahuje pevný počet opakujúcich sa prvkov detektora od 1 (bez duplikácie) po niekoľko duplikovaných prvkov , Chcem zabezpečiť, aby bol počet detektorov pre každý prvok vzorky vždy rovnaký (t. J. Ak P_1 má 3 "106" detektory, P_2 by mali mať aj 3 "106" detektory).

V súčasnosti robím to skôr hrubo:

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")

Zdá sa mi to veľmi šialené a pravdepodobne existujú lepšie spôsoby, ako to urobiť v pandách. Ako sa to dá dosiahnuť?

odpovede:

4 pre odpoveď č. 1

Vypne sa groupby je to, čo je potrebné na to, aby bolo toto jasné a stručné (a pravdepodobne aj efektívnejšie):

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

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