首页 > 解决方案 > 如何从另一个数据框中选择具有相同分布的数据

问题描述

我有两个关于病人和健康人的数据框。它们的大小不同,年龄分布也不同。我需要计算一些统计数据,但我需要根据年龄匹配的队列来做。这意味着我需要从一个数据集中随机选择与初始年龄分布相同的多次数据。

简单的例子。x数组包含病人的年龄,而不是y数组包含健康人的年龄。我创建了两个索引为的数据框id

import numpy as np
from numpy import random
x=random.randint(100, size=(1000))
y = random.randint(100, size=(700))
x_df = pd.DataFrame({'x':x})
y_df = pd.DataFrame({'y':y})
x_df['id'] = range(1, len(x_df) + 1)
x_df.set_index('id', inplace=True)

我想在两个数据集中随机选择多次相似的年龄分布。我的脚本如下:

result = []
exclude_hlthy = []
for i in set(x_df['x']):
    sick_ppl = x_df.index[x_df['x'] == i].tolist()
    L_sick = len(sick_ppl)
    if L_sick == 0:
        continue
    hlth_peers = y_df[y_df.y == i]
    L_healthy = hlth_peers.shape[0]
    if L_healthy < len(sick_ppl):
        pass
    else:
        hlthy_subsample = list(np.random.choice([x for x in hlth_peers.index if not x in exclude_hlthy], 
                                                    L_sick, replace = False))
        exclude_hlthy += hlthy_subsample
        result += hlthy_subsample

我想从具有相同和相似(步骤+1 +2 ....)年龄分布的小型数据集中获取索引列表。我的脚本不起作用。在实际数据中,它只选择两个样本。

标签: pythonpandas

解决方案


推荐阅读