如何将计数数据框转换为概率密度函数

ire*_*ene 7 python pandas scikit-learn

假设我对整数有以下观察结果:

df = pd.DataFrame({'observed_scores': [100, 100, 90, 85, 100, ...]})
Run Code Online (Sandbox Code Playgroud)

我知道这可以用作制作密度图的输入:

df['observed_scores'].plot.density()
Run Code Online (Sandbox Code Playgroud)

但假设我拥有的是一个计数表:

df = pd.DataFrame({'observed_scores': [100, 95, 90, 85, ...], 'counts': [1534, 1399, 3421, 8764, ...})
Run Code Online (Sandbox Code Playgroud)

这比完整observed_scores系列更便宜(我有很多观察)。

我知道可以使用计数绘制直方图,但如何绘制密度图?如果可能,是否可以在不必将计数表拆开/拆开成数千行的情况下完成?

Jua*_*n C 3

IIUC,statsmodels让您可以拟合加权 KDE:

from statsmodels.nonparametric.kde import KDEUnivariate

df = pd.DataFrame({'observed_scores': [100, 95, 90, 85],
                   'counts': [1534, 1399, 3421, 8764]})

kde1= KDEUnivariate(df.observed_scores)
kde_noweight = KDEUnivariate(df.observed_scores)
kde1.fit(weights=df.counts, fft=False)
kde_noweight.fit()
plt.plot(kde1.support, kde1.density)
plt.plot(kde_noweight.support, kde_noweight.density)
plt.legend(['weighted', 'unweighted'])
Run Code Online (Sandbox Code Playgroud)

输出:

在此输入图像描述