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" или что-то логическое, что соответствует его соответствующим столбцам.
Итак, вот проблемы, с которыми я сталкиваюсь:
Как применить это для каждой строки.
... для каждой парной комбинации, упомянутой выше.
... где имена столбцов и количество пар столбцов "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) должна быть возможность обрабатывать эти случаи с чистым питоном внутри цикла