如何基于双类别筛选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
相关产品推荐
相关产品推荐

