Python数据框中的置信区间
Posted
技术标签:
【中文标题】Python数据框中的置信区间【英文标题】:Confidence Interval in Python dataframe 【发布时间】:2019-04-30 09:11:45 【问题描述】:我正在尝试计算大型数据集中“力”列的平均值和置信区间 (95%)。我需要通过分组不同的“类”来使用 groupby 函数的结果。
当我计算平均值并将其放入新的数据框中时,它会为我提供所有行的 NaN 值。我不确定我是否走正确的路。有没有更简单的方法来做到这一点?
这是示例数据框:
df=pd.DataFrame( 'Class': ['A1','A1','A1','A2','A3','A3'],
'Force': [50,150,100,120,140,160] ,
columns=['Class', 'Force'])
为了计算置信区间,我做的第一步是计算平均值。这是我用的:
F1_Mean = df.groupby(['Class'])['Force'].mean()
这给了我所有行的NaN
值。
【问题讨论】:
您可以使用引导程序:***.com/a/66008548/10375049 【参考方案1】:正如 cmets 中所述,我无法复制您的错误,但您可以尝试检查您的数字是否存储为数字而不是字符串。使用df.info()
并确保相关列是浮点数或整数:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 6 entries, 0 to 5
Data columns (total 2 columns):
Class 6 non-null object # <--- non-number column
Force 6 non-null int64 # <--- number (int) column
dtypes: int64(1), object(1)
memory usage: 176.0+ bytes
【讨论】:
【参考方案2】:2021 年 10 月 25 日更新:@a-donda 指出,95% 应基于平均值的 1.96 X 标准差。
import pandas as pd
import numpy as np
import math
df=pd.DataFrame('Class': ['A1','A1','A1','A2','A3','A3'],
'Force': [50,150,100,120,140,160] ,
columns=['Class', 'Force'])
print(df)
print('-'*30)
stats = df.groupby(['Class'])['Force'].agg(['mean', 'count', 'std'])
print(stats)
print('-'*30)
ci95_hi = []
ci95_lo = []
for i in stats.index:
m, c, s = stats.loc[i]
ci95_hi.append(m + 1.96*s/math.sqrt(c))
ci95_lo.append(m - 1.96*s/math.sqrt(c))
stats['ci95_hi'] = ci95_hi
stats['ci95_lo'] = ci95_lo
print(stats)
输出是
Class Force
0 A1 50
1 A1 150
2 A1 100
3 A2 120
4 A3 140
5 A3 160
------------------------------
mean count std
Class
A1 100 3 50.000000
A2 120 1 NaN
A3 150 2 14.142136
------------------------------
mean count std ci95_hi ci95_lo
Class
A1 100 3 50.000000 156.580326 43.419674
A2 120 1 NaN NaN NaN
A3 150 2 14.142136 169.600000 130.400000
【讨论】:
如此出色的答案。我希望我能奖励它。返回包含所有统计信息的 df 是一个很好的做法。干得好。 所以这是我的补充:要让它返回格式化的字符串列,请添加以下内容:stats['95p_ci'] = "(" + stats['ci95_lo'].round(1).astype(str) + ', ' + stats['ci95_hi'].round(1).astype(str) + ')'
95% CI 的正确乘数是 1.96,而不是 1.95。另外,请注意,这是基于二项分布的正态分布近似值,仅适用于大样本。
@A.Donda,你是对的。让我更新以上是关于Python数据框中的置信区间的主要内容,如果未能解决你的问题,请参考以下文章