मेरे पास निम्न डेटाफ़्रेम mmLog है:

                  Experiment       Logmm
0               Spontaneous1       0.022815
1                     Light1       0.007222
2                       PTZ1       0.03168
3               Spontaneous1       0.015003
4                     Light1       0.013402
5                       PTZ1       0.021539
...                      ...            ...
38072  SpontaneousControl147       0.013685
38073  SpontaneousControl147       0.034702
38074  SpontaneousControl147       0.008993

मैं प्रत्येक अद्वितीय समूह से एक ttest चलाना चाहता हूं और प्रयोग कॉलम में नियंत्रण समूह से इसकी तुलना करना चाहता हूं। मैंने विशिष्ट पहचानकर्ता डेटाफ़्रेम का एक शब्दकोश बनाने का प्रयास किया है

df_uniq = dict()
for k, v in mmLog.groupby('Experiment'):
    df_uniq[k] = v

और फिर लूप के लिए उपयोग करें

from scipy.stats import ttest_ind

for key in df_uniq: 
    cat1 = key
    cat2 = df[df['Experiment']=='SpontaneousControl147']
    ttest_ind(cat1['Logmm'], cat2['Logmm'])

और TypeError प्राप्त करें: स्ट्रिंग इंडेक्स पूर्णांक होना चाहिए

0
Mark 19 पद 2019, 21:26

1 उत्तर

सबसे बढ़िया उत्तर

आप dict से मानों को असाइन करना चाहते हैं, न कि इसकी कुंजियों को cat1 पर:

from scipy.stats import ttest_ind

results = {}
for key, val in df_uniq.items(): 
    cat1 = val
    cat2 = df[df['Experiment']=='SpontaneousControl147']
    results[key] = ttest_ind(cat1['Logmm'], cat2['Logmm'])

cat1 को कुंजी निर्दिष्ट करके, आप समूह द्वारा परिणाम के बजाय एक स्ट्रिंग पर टी-परीक्षण करने का प्रयास कर रहे हैं।

संपादित करें: आप लूप से cat2 असाइन करने वाली रेखा को भी खींच सकते हैं क्योंकि इसे केवल एक बार करने की आवश्यकता है :)

1
pciunkiewicz 19 पद 2019, 19:04