【问题标题】:How can I deal with weighted sample on python?如何在 python 上处理加权样本?
【发布时间】:2019-08-21 13:45:55
【问题描述】:

我创建了这个数据作为示例。

样本中有 2 男 1 女。然而,预计男孩和女孩的数量是相等的。然后,我为每一行定义了“权重”,使男女人数相等。

然后,我想使用这个加权样本来创建年龄直方图。

我希望我能找到一个好的库来处理这种情况。

import pandas as pd
import seaborn as sns

data = [[10, 'M', 0.75], [15, 'F', 1.50], [20, 'M', 0.75]]

DataFrame = pd.DataFrame(data, columns=['Age', 'gender', 'Weight'])

sns.distplot(DataFrame['Age'], bins=5)

我希望有一个直方图,其中最大的一列是 Age=15(因为女孩的体重最大)。但是,对于值 Ag​​e=[10,15,20],我得到了 3 个相等的列。

【问题讨论】:

    标签: python-3.x pandas seaborn


    【解决方案1】:

    对 Matplotlib 的 Histogram 使用 weights 参数:

    import matplotlib.pyplot as plt
    import pandas as pd
    
    data = [[10, 'M', 0.75], [15, 'F', 1.50], [20, 'M', 0.75]]
    df = pd.DataFrame(data, columns=['age', 'gender', 'weight'])
    plt.hist(df["age"], weights=df["weight"]);
    

    有了更多数据,这看起来会更好。

    【讨论】:

    • 谢谢,我发现这个 pyreadstat 库确实改进了调查数据的工作。另外,现在我正在使用这个函数来处理带有加权数据的频率。 def weighted_freq(var, weight): cross = pd.Series(df[[var,weight]].groupby(var).sum()[weight])/df[weight].sum() 标签 = cross.index. map(name[var]) values = 100*cross.values tab = pd.DataFrame({'Labels': 标签, 'Frequency': values}) return(tab)
    猜你喜欢
    • 2012-10-14
    • 2011-09-19
    • 2014-08-28
    • 2021-12-10
    • 2020-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多