首页 > 解决方案 > Python Pandas 发现 2 个分布之间的统计差异

问题描述

我有 2 列具有相似数据。我绘制它们以比较它们的分布,并且我想量化它们的差异。

df = pd.DataFrame({'a':['cat','dog','bird','cat','dog','dog','dog'],
             'b':['cat','cat','cat','bird','dog','dog','dog']})

然后我绘制我的数据框的 2 列来比较它们的分布:

ax = df['a'].value_counts().plot(kind='bar', color='blue', width=.75, legend=True, alpha=0.8)
df['b'].value_counts().plot(kind='bar', color='maroon', width=.5, alpha=1, legend=True)

在此处输入图像描述

我如何从统计上量化分布的差异以说明它们有多相似?

会是一个简单的 t 检验还是别的什么?

标签: pythonpandasnumpyscipy

解决方案


为此,使用两侧 Kolmogorov-Smirnov 检验非常常见。

在 Python 中,您可以这样做scipy.stats.ks_2samp

from scipy import stats

merged = pd.merge(
    df.a.value_counts().to_frame(),
    df.b.value_counts().to_frame(),
    left_index=True,
    right_index=True)

stats.ks_2samp(merged.a, merged.b)

一般来说,如果返回元组的第二个值很小(比如小于 0.05),你应该拒绝分布相同的假设。


推荐阅读