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
选择独特元素创建的。然后,在其上生成一个随机样本(没有放回)。
我有一个数据框如下:
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
选择独特元素创建的。然后,在其上生成一个随机样本(没有放回)。