/ / Pandas DataFrame с MultiIndex: ефективен начин за проверка на дублиращи се елементи в един от индексите - python, pandas, data-analysis

Pandas DataFrame с 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. Въпреки това, аз се чудя как с такава структура да направя някои допълнителни проверки. Нека обясним по-добре: всяка колона "Sample" има фиксиран брой повтарящи се елементи "Детектор", от 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

Оказа се groupby е това, което е необходимо, за да стане това ясно и сбито (и вероятно също по-ефективно):

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

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