私は多くの列を持つ非常に巨大なパンダデータフレームを持っています。データフレームには2つのグループが含まれています。基本的には次のように設定されています。
import pandas as pd
csv = [{"air" : 0.47,"co2" : 0.43 , "Group" : 1}, {"air" : 0.77,"co2" : 0.13 , "Group" : 1}, {"air" : 0.17,"co2" : 0.93 , "Group" : 2} ]
df = pd.DataFrame(csv)
私は上のt検定t検定を実行するair
とco2
、それによって2つのグループを比較するGroup = 1
とGroup = 2
。
私は単なる列よりもはるかに多くの列を持っていますair
co2
-したがって、データフレーム内のすべての列で機能するプロシージャを見つけたいと思います。オーダーとscipy.stats.ttest_rel
一緒に使えそうです。それはどのように機能しますか?よろしくお願いします/ Rpd.groupby
apply
pandasdataframe.whereメソッドを使用します。
group1_air = df.where(df.Group== 1).dropna()['air']
group2_air = df.where(df.Group== 2).dropna()['air']
このコードビットは、group2_airのgroup列が1であるair列のすべての値とgroupが2であるairのすべての値をgroup1_airに返します。このメソッドは、指定された条件が満たされないすべての行に対してNANを返すdrop.na()
ため、が必要です.where
。したがって、を使用すると、groupが2のすべての行がNAN値で返されますdf.where(df.Group== 1)
。
使用する必要があるかどうか、scipy.stats.ttest_rel
またはscipy.stats.ttest_ind
グループによって異なります。サンプルが独立したグループからのものであるttest_ind
場合は、サンプルが関連グループからのものである場合に使用する必要がありますttest_rel
。
したがって、サンプルが互いに独立している場合、必要なコードの最後の部分はです。
scipy.stats.ttest_ind(group1_air,group2_air)
それ以外の場合は使用する必要があります
scipy.stats.ttest_rel(group1_air,group2_air)
co2もテストしたい場合は、与えられた例でco2の空気を変更するだけです。
編集:
これは、グループ列を除くデータフレーム内のすべての列に対してttestを実行するために実行する必要があるコードの大まかなスケッチです。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']
このコードの最後に、ループするすべての列に対するttestの出力を含むデータフレームがあります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加