這是一個示例資料框,我的實際資料框還有 100 多行。
nums_1 nums_2 nums_3
1 1 8
2 1 7
3 5 9
是否有一種方法可以計算每行的 95% 置信區間?一種適用于大型資料框的方法?
df = pd.DataFrame({'nums_1': [1, 2, 3], 'nums_2': [1, 1, 5], 'nums_3' : [8,7,9]})
uj5u.com熱心網友回復:
您可以使用stats.norm.interval,并找到置信區間在95%水平numpy.mean,并numpy.std像下面每一行中的值:
from scipy import stats
import numpy as np
df = pd.DataFrame({'nums_1': [1, 2, 3], 'nums_2': [1, 1, 5], 'nums_3' : [8,7,9]})
df['95_interval'] = df.apply(lambda row : \
stats.norm.interval(0.95, loc=np.mean(row),
scale=np.std(row)), axis=1)
輸出:
>>> df
nums_1 nums_2 nums_3 95_interval
0 1 1 8 (-3.134217846965163, 9.80088451363183)
1 2 1 7 (-1.8109239490159825, 8.477590615682649)
2 3 5 9 (0.7776575196232134, 10.55567581371012)
uj5u.com熱心網友回復:
您可以使用:
from scipy import stats
df.apply(lambda x: stats.t.interval(0.95, len(x)-1, loc=np.mean(x), scale=stats.sem(x)), axis=1)
通過使用以下方法,您將獲得基本相同的結果:
import statsmodels.stats.api as sms
df.apply(lambda x: sms.DescrStatsW(x).tconfint_mean(), axis=1)
兩個答案都回傳相同的結果 - 元組。
答案如下:從樣本資料計算置信區間 重要的是要理解,如果每一行(每個樣本)都是從標準偏差未知的正態分布中獨立繪制的,那么它可以正常作業。
當涉及到大型資料幀時,簡單的解決方案是使用 swifter。但是,它只會使您的計算速度加快兩倍。盡管如此,還是值得一試:https : //towardsdatascience.com/do-you-use-apply-in-pandas-there-is-a-600x-faster-way-d2497facfa66
import statsmodels.stats.api as SMS
import swifter
df.swifter.apply(lambda x: sms.DescrStatsW(x).tconfint_mean(), axis=1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/347949.html
上一篇:如何使用Python/RegEx提取數值和相應的限定符
下一篇:如何將一個資料幀分成幾個資料幀
