You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于双类别筛选Pandas列并进行t检验?

多条件筛选下的Pandas t检验正确写法

首先是创建示例DataFrame的代码:

import pandas as pd
import numpy as np
from scipy.stats import ttest_ind

df = pd.DataFrame(np.random.randint(0,100,size=(15, 3)), columns=list('NMO'))
df['Category1'] = ['I','I','I','I','I','G','G','G','G','G','P','P','I','I','P']
df['Category2'] = ['W','W','C','C','C','W','W','W','W','W','O','O','O','O','O']

如果要对比同时满足Category1为G且Category2为W和同时满足Category1为I且Category2为W的两组N列数据做t检验,你之前的写法存在两处错误,正确写法有两种:

方式一:使用&连接布尔条件

ttest_ind(
    df[(df['Category1']=='G') & (df['Category2']=='W')]['N'],
    df[(df['Category1']=='I') & (df['Category2']=='W')]['N']
)

方式二:使用query方法简化代码

ttest_ind(
    df.query("Category1 == 'G' and Category2 == 'W'")['N'],
    df.query("Category1 == 'I' and Category2 == 'W'")['N']
)

错误原因说明

你之前的代码问题在于:

  • 无需给布尔条件额外套一层列表([df['Category1']=='G']这种写法会导致索引匹配错误);
  • Pandas中对布尔数组做逻辑与运算时,不能用Python原生的and,必须用&运算符,且每个条件需要用括号包裹,避免运算符优先级混乱。

内容的提问来源于stack exchange,提问作者Baaridi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 21:50:33