多指标随机抽样

2024-03-28 12:03:43 发布

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

我有一个数据框,如下所示:

id_1  id_2  value
1     0     1
1     1     2
1     2     3
2     0     4
2     1     1
3     0     5
3     1     1
4     0     5
4     1     1
4     2     6
4     3     7  
11    0     8
11    1     14
13    0     10
13    1     9 

我想从这个表中随机抽取一个大小为n的样本,不需要替换,基于id\u 1。对于id_1列,此行必须是唯一的,并且只能出现一次。你知道吗

最终结果如下:

id_1  id_2  value
1     1     2
2     0     4
4     3     7
13    0     10

我试着做了一个分组,并使用索引从中取出一行随机抽样但它不是一路走的。你知道吗

有人能给我一个如何使这个工作的指针吗?下面是DF的代码!你知道吗

一如既往,感谢您的时间和投入!你知道吗

/瑞典

df = pd.DataFrame({'id_1' : [1,1,1,2,2,3,3,4,4,4,4,11,11,13,13],
               'id_2' : [0,1,2,0,1,0,1,0,1,2,3,0,1,0,1],
               'value_col' : [1,2,3,4,1,5,1,5,1,6,7,8,14,10,9]})

Tags: 数据代码iddataframedfvalue时间col
2条回答

您可以使用矢量化函数(而不是循环)来实现这一点

import numpy as np

uniqued = df.id_1.reindex(np.random.permutation(df.index)).drop_duplicates()

df.ix[np.random.choice(uniqued.index, 1, replace=False)]

uniqued是由id_1对唯一元素的随机洗牌+选择创建的。然后,在其上生成随机样本(无替换)。你知道吗

每个id随机抽取一个样本:

for id in sorted(set(df["id_1"])):
    print(df[df["id_1"] == id].sample(1))

附言:

使用pythons列表理解翻译上述解决方案,返回索引列表:

idx = [df[df["id_1"] == val].sample(1).index[0] for val in sorted(set(df["id_1"]))]

相关问题 更多 >