首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python数据帧中的置信区间

问Python数据帧中的置信区间
EN

Stack Overflow用户
提问于 2018-11-28 20:45:55
回答 2查看 23.8K关注 0票数 10

我正在尝试计算大型数据集中"Force“列的平均值和置信区间(95%)。我需要通过使用groupby函数对不同的“类”进行分组来获得结果。

当我计算平均值并将其放入新的数据帧中时,它给出了所有行的NaN值。我不确定我走的是不是正确的路。有没有更简单的方法可以做到这一点?

以下是示例数据帧:

代码语言:javascript
复制
df=pd.DataFrame({ 'Class': ['A1','A1','A1','A2','A3','A3'], 
                  'Force': [50,150,100,120,140,160] },
                   columns=['Class', 'Force'])

为了计算置信区间,我做的第一步是计算平均值。这是我使用的:

代码语言:javascript
复制
F1_Mean = df.groupby(['Class'])['Force'].mean()

这为我提供了所有行的NaN值。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-28 23:17:50

2021年10月25日更新:@a-donda指出,95%应基于平均值的1.96X标准差。

代码语言:javascript
复制
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)

输出为

代码语言:javascript
复制
  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
票数 25
EN

Stack Overflow用户

发布于 2018-11-28 21:18:44

正如评论中提到的,我不能重复您的错误,但您可以尝试检查您的数字是否存储为数字,而不是字符串。使用df.info()并确保相关列为float或int:

代码语言:javascript
复制
<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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53519823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档