t 测试 groupby pandas 之后的多列
Posted
技术标签:
【中文标题】t 测试 groupby pandas 之后的多列【英文标题】:t test for multiple columns after groupby pandas 【发布时间】:2020-03-04 13:19:09 【问题描述】:我想计算和测试 pandas 中两组不同的多列的平均值,我可以计算出计算部分,但测试部分到目前为止还没有好的解决方案。下面是一个玩具样品和我想要的结果。
df = pd.DataFrame(np.random.randint(0,100,size=(100, 2)), columns=['col_1','col_2'])
df['group'] = ['A']*50 + ['B']*50
df.groupby('group').agg("col_1":"mean","col_2":"mean")
col_1 col_2
group
A 52.26 56.58
B 53.04 49.18
我想拥有什么:
col_1 t_col_1 col_2 t_col_2
group
A 52.26 4.3*** 56.58 0.8
B 53.04 4.3*** 49.18 0.8
其中t_col_1
是A组和B组col_1
的均值差的t个统计量,即t.test(df.loc[df['group'].isin(['B'])][col_1], df.loc[df['group'].isin(['A'])][col_1])
。星星不是必需的,但如果它们能在那里就很棒了。
关于如何做到这一点的任何建议?
【问题讨论】:
***.com/questions/13404468/t-test-in-pandas 是否应该对整个人群进行t检验,即之前 groupby? Agroupby.agg
在这里不会很好,因为它将 DataFrame 划分为单独的组,然后对每个组进行计算。两个样本 t 检验要求您将多个组发送到函数中,尽管我猜 groupby
至少会为您分隔每个组。
【参考方案1】:
您可以遍历列并按您的组执行 t 检验:
import pandas as pd
import scipy.stats as stats
tstats =
ix_a = df['group'] == 'A'
for x in df:
if x != 'group':
tstats['t_' + x] = stats.ttest_ind(df[x][ix_a], df[x][~ix_a])[0]
df.groupby('group').mean().assign(**tstats)
结果:
col_1 col_2 t_col_1 t_col_2
group
A 56.24 46.84 0.85443 -0.281279
B 51.24 48.42 0.85443 -0.281279
【讨论】:
以上是关于t 测试 groupby pandas 之后的多列的主要内容,如果未能解决你的问题,请参考以下文章