如何使用逐元素数据框操作?
how to use elementwise dataframe manipulation?
我有 2 个数据框,代表估计均值和标准误差。
import numpy as np
import scipy.stats as st
rows = (1, 2)
col1 = ["mean_x", "mean_y"]
col2 = ["std_x", "std_y"]
data1 = ([10, 20], [5, 10])
data2 = ([1, 2], [0.5, 1])
df1 = pd.DataFrame(data1, index = rows, columns = col1)
df2 = pd.DataFrame(data2, index = rows, columns = col2)
我想对这两个数据框进行元素操作,构建一个置信区间为 95% 的数据框
理想的格式是
运行一个循环好像很别扭,请问有没有更优雅,更高效的方法?
您可以使用 stats.norm.interval
并找到 95% 级别的置信区间,然后创建如下所示的 DataFrame:
>>> from scipy import stats
>>> twoDf = pd.concat([df1, df2], axis=1)
mean_x mean_y std_x std_y
1 10 20 1.0 2
2 5 10 0.5 1
>>> cols = [('mean_x','std_x', 'interval_x'),('mean_y','std_y', 'interval_y')]
>>> for col in cols:
... twoDf[col[2]] = twoDf.apply(lambda row : \
... stats.norm.interval(0.95, loc=row[col[0]], scale=row[col[1]]), axis=1)
>>> twoDf
mean_x mean_y std_x std_y interval_x interval_y
1 10 20 1.0 2 (8.040036015459947, 11.959963984540053) (16.080072030919894, 23.919927969080106)
2 5 10 0.5 1 (4.020018007729973, 5.979981992270027) (8.040036015459947, 11.959963984540053)
我有 2 个数据框,代表估计均值和标准误差。
import numpy as np
import scipy.stats as st
rows = (1, 2)
col1 = ["mean_x", "mean_y"]
col2 = ["std_x", "std_y"]
data1 = ([10, 20], [5, 10])
data2 = ([1, 2], [0.5, 1])
df1 = pd.DataFrame(data1, index = rows, columns = col1)
df2 = pd.DataFrame(data2, index = rows, columns = col2)
我想对这两个数据框进行元素操作,构建一个置信区间为 95% 的数据框
理想的格式是
运行一个循环好像很别扭,请问有没有更优雅,更高效的方法?
您可以使用 stats.norm.interval
并找到 95% 级别的置信区间,然后创建如下所示的 DataFrame:
>>> from scipy import stats
>>> twoDf = pd.concat([df1, df2], axis=1)
mean_x mean_y std_x std_y
1 10 20 1.0 2
2 5 10 0.5 1
>>> cols = [('mean_x','std_x', 'interval_x'),('mean_y','std_y', 'interval_y')]
>>> for col in cols:
... twoDf[col[2]] = twoDf.apply(lambda row : \
... stats.norm.interval(0.95, loc=row[col[0]], scale=row[col[1]]), axis=1)
>>> twoDf
mean_x mean_y std_x std_y interval_x interval_y
1 10 20 1.0 2 (8.040036015459947, 11.959963984540053) (16.080072030919894, 23.919927969080106)
2 5 10 0.5 1 (4.020018007729973, 5.979981992270027) (8.040036015459947, 11.959963984540053)