【问题标题】:How to sample a pandas dataframe selecting X rows from group 1 but Y rows from group2如何对从第 1 组中选择 X 行但从第 2 组中选择 Y 行的熊猫数据框进行采样
【发布时间】:2020-01-14 10:50:30
【问题描述】:

想象一个学生/成绩数据框,这样

使用 pandas,我如何创建多个组,使每个组有 1 名学生获得 A,2 名学生获得 B,1 名学生获得 C?

我尝试使用 pandas 的 GroupBy['Grade'],然后从每个年级组中采样。这样做的问题是它为我提供了来自每个年级组的相同数量的学生,但是,我想要来自每个特定年级组的特定数量的学生。

解决方案不应该关心“剩菜”。如果我有一个遵循所需分布的完整集合,我会很高兴。

感谢您的帮助,

【问题讨论】:

    标签: python pandas distribution


    【解决方案1】:

    您可以通过使用字典来存储每个组的样本数来做到这一点,如下所示:

    import pandas as pd
    import numpy as np
    
    # create the dataframe
    df = pd.DataFrame(zip(['Person'+ str(i+1) for i in range(30)],
                     np.random.choice(['A','B', 'C'], 30, replace=True)),
                 columns = ['Student','Grade'])
    
    # use a dict to store the sample frequencies
    sample_freq = {'A':1, 'B':2, 'C':3}
    
    # group by desired variable
    groups = df.groupby('Grade')
    
    # sample from each group and concatenate them to a single data frame
    pd.concat(
        [group_df.sample(sample_freq[group]) for group,group_df in groups])
    

    【讨论】:

    • 谢谢!我不知道您可以在采样功能中使用字典——我和我的学生都很欣赏这一点。
    猜你喜欢
    • 2017-06-30
    • 1970-01-01
    • 2015-12-03
    • 2022-01-21
    • 1970-01-01
    • 2018-09-19
    • 1970-01-01
    • 2011-03-30
    • 2011-11-12
    相关资源
    最近更新 更多