如何从另一个数据帧中的列中采样导致相同分布的数据帧

2024-06-25 23:10:26 发布

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

使用熊猫:

我有一个数据框,里面有这样的人:

           member_id on_service  start_date    end_date days_in_study dod  \
12345678    12345678      False  2019-11-03  2020-05-31           210 NaT   
23456789    23456789       True  2019-12-27  2020-05-31           156 NaT    

          last_enrollment_date       RAF   Expense       Age admits_in_range  \
12345678            2020-05-31  0.144511  0.042008  0.716981               0   
23456789            2020-05-31  0.145709  0.033580  0.547170               0   

我正在对在线服务组和非在线服务组进行一些分析

我想对非在线服务组进行抽样,使其与在线服务组具有相同的年龄分布

我试过了

weights = on_service_members["Age"] 
df = no_on_service_members.sample(weights = weights)

但我得到了一个错误“无效权重:权重和为零”

我认为这是因为它没有使用年龄列来查找体重?或许我完全走错了方向


Tags: 数据inidagedateonservicenat
1条回答
网友
1楼 · 发布于 2024-06-25 23:10:26

我相信我已经找到了一个解决方案,但这似乎应该是我所缺少的标准库的一部分

 def sample_with_distribution(source_of_distribution,source_to_sample,column_name):
    size_to_sample = len(source_of_distribution)

    bins = source_of_distribution[column_name].value_counts(bins=8,normalize=True)

    new_data_frame = pd.DataFrame(data=None, columns=source_to_sample.columns)

    for iv, bin_size in bins.iteritems():
        m = source_to_sample[(source_to_sample[column_name] > iv.left) & (source_to_sample[column_name] <= iv.right)]
        how_many = int(bin_size * size_to_sample)
        if how_many > len(m):
            print( "ISSUE: How many we want ", how_many, " How big is it ", len(m))
            how_many = len(m)

        a = m.sample(n = how_many, random_state=100)
        new_data_frame = new_data_frame.append(a)
        
    return new_data_frame

它看起来确实起作用了。当我通过KDE运行TTEST和graph时,看起来我得到了我想要的东西

Distribution Match

相关问题 更多 >