#python #pandas #transform #combinations
#python #панды #преобразовать #комбинации
Вопрос:
У меня есть 4 фрейма данных:
symptoms = pd.DataFrame(columns=['subject', 'name', 'type'])
AA_alleles = pd.DataFrame(columns=['subject', 'chrom', 'pos', 'bp', 'SNPid'])
Aa_alleles = pd.DataFrame(columns=['subject', 'chrom', 'pos', 'bp', 'SNPid'])
aa_alleles = pd.DataFrame(columns=['subject', 'chrom', 'pos', 'bp', 'SNPid'])
‘subject’ во всех фреймах данных содержит уникальный идентификатор субъекта. Я хочу найти комбинации всех симптомов и аллелей с количеством субъектов для каждой комбинации, а также столбец для зиготности (AA, Aa или aa для каждого имени df). Например, результаты, которые я ищу, это:
['symptom_name', 'symptom_type', 'zygosity', 'chrom', 'pos', 'bp', 'SNPid', 'subject_count']
Каков наилучший способ выполнить это преобразование? Для справки, это делается для создания данных, готовых для теста Фримена-Халтона.
Комментарии:
1. Что вы пробовали до сих пор? Кроме того, все
subject
ли идентификаторы в**_alleles
подмножествах идентификаторов вsymptoms
?2. Они будут, хотя я рассматриваю возможность исключения aa_alleles из-за длины запросов, поэтому эти подсчеты будут состоять из общего количества объектов — двух других для анализа. До сих пор я делал **_alleles[‘zygosity’] = ** и как раз собираюсь выполнить внутреннее слияние по теме для каждого **_alleles … Я предполагаю, что это в значительной степени так, тогда мне нужно решить, как уменьшить частоту. В Aa_alleles более 8 миллионов строк, а в aa_allales их будет намного больше, поэтому я не уверен, будет ли более эффективный метод, чем простое добавление, а затем уменьшение.
Ответ №1:
Я думаю, что я это понял:
AA_alleles['zygosity'] = 'AA'
Aa_alleles['zygosity'] = 'Aa'
aa_alleles['zygosity'] = 'aa'
df = symptoms.merge(AA_alleles, on='subject')
df2 = symptoms.merge(Aa_alleles, on='subject')
df3 = symptoms.merge(aa_alleles, on='subject')
total = df.append(df2, ignore_index=True)
total = total.append(df3, ignore_index=True)
count = total.groupby(['chrom','pos','bp','SNPid','zygosity','name','type']).count()
Кажется, это помогает:
Chromosome_X 2724760 T rs55842969;rs111382948 Aa Albumin high 1
BMI high 1
FEV1 high 1
low 1
FVC high 1
... ... ... ... ... ... ... ...
Chromosome_9 141016320 A rs41290003 Aa Trunkal Fat Mass high 1
Urea high 1
VLDL high 1
WHR high 2
Weight high 1