私はpandas dataframe.whereメソッドを使用します。コードの
group1_air = df.where(df.Group== 1).dropna()['air']
group2_air = df.where(df.Group== 2).dropna()['air']
このビットはgroup1_airにグループ列が1である空気のコラムのすべての値およびグループはgroup2_air 2である空気のすべての値を返します。 メソッドは、指定された条件が満たされないすべての行に対してNANを返すため、drop.na()
が必要です。したがって、df.where(df.Group== 1)
を使用すると、groupが2のすべての行がNAN値を返します。
scipy.stats.ttest_rel
またはを使用する必要があるかどうかは、グループによって異なります。サンプルが独立したグループからのものである場合は、ttest_rel
を使用する必要があるサンプルが関連グループのものである場合は、ttest_ind
を使用する必要があります。
あなたのサンプルが他と独立している場合は、必要なコードの最後の部分があります。あなたはまた、あなたは、単に与えられた例では、CO2のための空気を変更する必要がCO2をテストしたい場合は
scipy.stats.ttest_rel(group1_air,group2_air)
を使用する必要がある他の
scipy.stats.ttest_ind(group1_air,group2_air)
。
編集:
これは、あなたがグループ列を除いて、あなたのデータフレーム内のすべてのカラムにttestsを実行するために実行する必要があり、コードのラフスケッチです。 column_list
でビットを改ざんして、必要に完全に準拠させる必要があります(たとえば、すべての列をループしたくない場合があります)。このコードの終わりに
# get a list of all columns in the dataframe without the Group column
column_list = [x for x in df.columns if x != 'Group']
# create an empty dictionary
t_test_results = {}
# loop over column_list and execute code explained above
for column in column_list:
group1 = df.where(df.Group== 1).dropna()[column]
group2 = df.where(df.Group== 2).dropna()[column]
# add the output to the dictionary
t_test_results[column] = scipy.stats.ttest_ind(group1,group2)
results_df = pd.DataFrame.from_dict(t_test_results,orient='Index')
results_df.columns = ['statistic','pvalue']
あなたがオーバーループしているだろう、すべてのカラムでのt検定の出力を持つデータフレームを持っています。
これは1つ1つの場合の非常に良い答えです。しかし、私は 'air'と' co2'のために試してみたいと思っています。どのようにそれが起こるようにするか? – Rachel
@レイチェル私は答えを編集して大文字と小文字を区別しませんでした。 – error