Pandas DataFrame с функцией: изменение столбцов

Учитывая следующий DataFrame:

import pandas as pd
import numpy as np
d=pd.DataFrame({' Label':['a','a','b','b'],'Count1':[10,20,30,40],'Count2':[20,45,10,35],
                'Count3':[40,30,np.nan,22],'Nobs1':[30,30,70,70],'Nobs2':[65,65,45,45],
                'Nobs3':[70,70,22,32]})
d

    Label   Count1  Count2  Count3  Nobs1   Nobs2   Nobs3
0   a           10      20    40.0     30      65      70
1   a           20      45    30.0     30      65      70
2   b           30      10     NaN     70      45      22
3   b           40      35    22.0     70      45      32

Я хотел бы применить z-критерий для пропорций для каждой комбинации групп столбцов (1 и 2, 1 и 3, 2 и 3) в строке. Под группой столбцов я имею в виду, например, "Count1" и "Nobs1".

Например, один такой тест будет:

count = np.array([10, 20]) #from first row of Count1 and Count2, respectively
nobs = np.array([30, 65]) #from first row of Nobs1 and Nobs2, respectively
pv = proportions_ztest(count=count,nobs=nobs,value=0,alternative='two-sided')[1] #this returns just the p-value, which is of interest
pv
0.80265091465415639

Я хотел бы, чтобы результат (pv) вошел в новый столбец (первую строку) с именем "p_1_2" или что-то логическое, что соответствует его соответствующим столбцам.

Итак, вот проблемы, с которыми я сталкиваюсь:

  1. Как применить это для каждой строки.

  2. ... для каждой парной комбинации, упомянутой выше.

  3. ... где имена столбцов и количество пар столбцов "Count" и "Nobs" могут различаться (при условии, что для каждого столбца "Count" всегда будет столбец "Nobs").

Относится к 3: Например, у меня может быть столбец с именем "18-24", а другой - с именем "18-24_Nobs".

Заранее спасибо!

1 ответ

Решение

1) и 2) для одного теста дополнительные тесты могут быть закодированы аналогично или в дополнительном цикле

for i,row in d.iterrows():
    d.loc[i,'test'] = proportions_ztest(count=row['Count1':'Count2'].values,
                                        nobs=row['Nobs1':'Nobs2'].values,
                                        value=0,alternative='two-sided')[1]

для 3) должна быть возможность обрабатывать эти случаи с чистым питоном внутри цикла

Другие вопросы по тегам