Python 多个指标随机抽样

Python random sampling in multiple indices

我有一个数据框如下:

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 

我想根据id_1从这个table中取出一个大小为n的随机样本,不放回。此行相对于 id_1 列必须是唯一的,并且只能出现一次。

最终结果类似于:

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

我试图做一个分组并使用索引从 random.sample 中取出一行,但它一直没有成功。

有人可以指导我如何进行这项工作吗?下面是 DF 的代码!

一如既往,感谢您的宝贵时间和意见!

/swepab

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]})

每个 id 随机采样一个:

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

PS:

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

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

您可以使用

使用向量化函数(而不是循环)来完成此操作
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 选择独特元素创建的。然后,在其上生成一个随机样本(没有放回)。