使用describe()和加权数据平均值、标准差、中位数、分位数

2024-10-01 15:47:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python和pandas(从使用SAS作为我的主要分析平台)还比较陌生,所以如果已经有人问过/回答过这个问题,我会提前道歉。(我已经搜索了文档和本网站,寻找答案,但还没有找到答案。)

我有一个数据帧(称为resp)包含受访者级别的调查数据。我想对其中一个字段(称为anninc[年收入的缩写])执行一些基本的描述性统计。在

resp["anninc"].describe()

这给了我一些基本的数据:

^{pr2}$

但有一个陷阱。鉴于样本是如何构建的,有必要对受访者数据进行权重调整,以便在进行分析时,并非所有数据都被视为“相等”。我在dataframe中有另一列(称为tufnwgrp),它表示在分析过程中应该应用于每个记录的权重。在

在我以前的SAS生活中,大多数proc都可以选择使用这样的权重来处理数据。例如,提供相同结果的标准过程单变量如下所示:

proc univariate data=resp;
  var anninc;
  output out=resp_univars mean=mean median=50pct q1=25pct q3=75pct min=min max=max n=count;
run;

使用加权数据进行的相同分析如下所示:

proc univariate data=resp;
  var anninc;
  weight tufnwgrp;
  output out=resp_univars mean=mean median=50pct q1=25pct q3=75pct min=min max=max n=count
run;

对于describe()等方法,pandas中是否有类似的加权选项?在


Tags: 数据答案pandas过程procminmeanresp
1条回答
网友
1楼 · 发布于 2024-10-01 15:47:00

统计和计量经济学图书馆(statsmodels)似乎可以处理这个问题。下面是一个扩展@MSeifert对类似问题的答案here的示例。在

df=pd.DataFrame({ 'x':range(1,101), 'wt':range(1,101) })

from statsmodels.stats.weightstats import DescrStatsW
wdf = DescrStatsW(df.x, weights=df.wt, ddof=1) 

print( wdf.mean )
print( wdf.std )
print( wdf.quantile([0.25,0.50,0.75]) )

^{pr2}$

我不使用SAS,但这与stata命令给出的答案相同:

sum x [fw=wt], detail

Stata实际上有一些权重选项,在本例中,如果指定aw(分析权重)而不是fw(频率权重),则给出了稍微不同的答案。另外,stata要求fw为整数,而{}允许非整数权重。重量比你想象的要复杂。。。这是开始进入杂草,但有一个伟大的讨论加权问题,以计算标准差here。在

还请注意,DescrStatsW似乎不包括min和max的函数,但只要权重不为零,这应该不是问题,因为权重不会影响最小值和最大值。但是,如果您确实有一些零权重,则最好使用加权最小值和最大值,但在pandas中也很容易计算:

df.x[ df.wt > 0 ].min()
df.x[ df.wt > 0 ].max()

相关问题 更多 >

    热门问题