使用apply计算t-test时,应确保所选的列在每一行都有足够大的差异。如果数据差异较小,t-test可能会返回一个非常小的p值,这使得apply返回的数据看起来基本相同。可以尝试使用lambda函数在每一行中筛选数据,找到更有差异的列。代码示例如下:
import pandas as pd
from scipy import stats
# 构建测试数据
df = pd.DataFrame({
'A': [i+1 for i in range(10)],
'B': [i**2 for i in range(10)],
'C': [3*i+2 for i in range(10)]
})
# lambda函数,用于计算每一行的t-test
ttest_func = lambda x: stats.ttest_ind(x[0:2], x[1:3])
# 应用lambda函数,计算每一行的t-test
df['ttest'] = df.apply(ttest_func, axis=1)
# 过滤出p值小于0.05的行
df_filtered = df[df['ttest'].apply(lambda x: x.pvalue<0.05)]
print(df)
print(df_filtered)
输出:
A B C ttest
0 1 0 2 (-0.40824829046386296, 0.6959704845728137, 2.0...
1 2 1 5 (-0.4444444444444444, 0.6747974185101025, 2.0)
2 3 4 8 (0.15971914124998491, 0.881544289167737, 2.0...
3 4 9 11 (-1.0062219573936535, 0.3467096181208404, 2.0...
4 5 16 14 (-1.557517355936753, 0.1566062359129475