gpt4 book ai didi

python-3.x - 如何在 Pandas 数据框中按组进行 t 检验?

转载 作者:行者123 更新时间:2023-12-04 03:05:22 25 4
gpt4 key购买 nike

我有一个很大的 Pandas 数据框,有很多列。数据框包含两组。基本设置如下:

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)

我想对 airco2 执行配对 t 检验,从而比较两组 Group = 1Group = 2

我有更多的列,而不仅仅是 air co2 - 因此,我想找到一个适用于数据帧中所有列的过程。我相信,我可以将 scipy.stats.ttest_relpd.groupby oder apply 一起使用。这将如何运作?提前致谢/R

最佳答案

我会使用pandas dataframe.where 方法。

group1_air = df.where(df.Group== 1).dropna()['air']
group2_air = df.where(df.Group== 2).dropna()['air']

这段代码将 group 列为 1 的 air 列的所有值和 group2_air 中 group 为 2 的 air 列的所有值返回到 group1_air 中。 drop.na() 是必需的,因为 .where 方法将为不满足指定条件的每一行返回 NAN。因此,当您使用 df.where(df.Group== 1) 时,所有 group 为 2 的行都将返回 NAN 值。

您是否需要使用 scipy.stats.ttest_relscipy.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。

编辑:

这是您应该运行的代码的粗略草图,以对数据帧中的每一列(组列除外)执行测试。您可能需要对 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 输出。

关于python-3.x - 如何在 Pandas 数据框中按组进行 t 检验?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45015038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com