Python:滚动计算置信区间
Python: Calculate confidence interval on a rolling basis
我有以下数据框:
df = pd.DataFrame({
'a': [0.1, 0.5, 0.1, 0.3],
'b': [0.2, 0.4, 0.2, 0.2],
'c': [0.3, 0.2, 0.4, 0.1],
'd': [0.1, 0.1, 0.1, 0.7],
'e': [0.2, 0.1, 0.3, 0.4],
'f': [0.7, 0.1, 0.1, 0.1]}
)
我想滚动获取每列的平均值(比如说滚动(1).mean()),然后获取每个条目的 95% 置信区间 CI = x +- z*s/sqrt(n),其中 x 是滚动平均值,z 是置信度值,s 是滚动标准差(比如 rolling(1).stdev),n 是条目数列。
这可以在没有循环的情况下用 Python 方式完成吗?
谢谢。
IIUC,尝试:
WINDOW = 2
lower_bound = df.rolling(WINDOW).mean() - 1.96*df.rolling(WINDOW).std()
upper_bound = df.rolling(WINDOW).mean() + 1.96*df.rolling(WINDOW).std()
output = lower_bound.join(upper_bound, lsuffix="_lower", rsuffix="_upper").sort_index(axis=1)
>>> output
a_lower a_upper b_lower ... e_upper f_lower f_upper
0 NaN NaN NaN ... NaN NaN NaN
1 -0.254372 0.854372 0.022814 ... 0.288593 -0.431558 1.231558
2 -0.254372 0.854372 0.022814 ... 0.477186 0.100000 0.100000
3 -0.077186 0.477186 0.200000 ... 0.488593 0.100000 0.100000
[4 rows x 12 columns]
我有以下数据框:
df = pd.DataFrame({
'a': [0.1, 0.5, 0.1, 0.3],
'b': [0.2, 0.4, 0.2, 0.2],
'c': [0.3, 0.2, 0.4, 0.1],
'd': [0.1, 0.1, 0.1, 0.7],
'e': [0.2, 0.1, 0.3, 0.4],
'f': [0.7, 0.1, 0.1, 0.1]}
)
我想滚动获取每列的平均值(比如说滚动(1).mean()),然后获取每个条目的 95% 置信区间 CI = x +- z*s/sqrt(n),其中 x 是滚动平均值,z 是置信度值,s 是滚动标准差(比如 rolling(1).stdev),n 是条目数列。
这可以在没有循环的情况下用 Python 方式完成吗?
谢谢。
IIUC,尝试:
WINDOW = 2
lower_bound = df.rolling(WINDOW).mean() - 1.96*df.rolling(WINDOW).std()
upper_bound = df.rolling(WINDOW).mean() + 1.96*df.rolling(WINDOW).std()
output = lower_bound.join(upper_bound, lsuffix="_lower", rsuffix="_upper").sort_index(axis=1)
>>> output
a_lower a_upper b_lower ... e_upper f_lower f_upper
0 NaN NaN NaN ... NaN NaN NaN
1 -0.254372 0.854372 0.022814 ... 0.288593 -0.431558 1.231558
2 -0.254372 0.854372 0.022814 ... 0.477186 0.100000 0.100000
3 -0.077186 0.477186 0.200000 ... 0.488593 0.100000 0.100000
[4 rows x 12 columns]