2016-04-22 59 views
0

从这个简单的数据帧df开始:大熊猫 - GROUPBY和选择随机值的变量数量根据列

df = pd.DataFrame({'c':[1,1,2,2,2,2,3,3,3], 'n':[1,2,3,4,5,6,7,8,9], 'N':[1,1,2,2,2,2,2,2,2]}) 

我想选择n每个cN随机值。到目前为止,我设法GROUPBY,并得到一个单一的元素/组:

sample = df.groupby('c').apply(lambda x :x.iloc[np.random.randint(0, len(x))]) 

返回:

N c n 
c   
1 1 1 2 
2 2 2 4 
3 2 3 8 

我的预期输出会是这样的:

N c n 
c   
1 1 1 2 
2 2 2 4 
2 2 2 3 
3 2 3 8 
3 2 3 7 

因此让1根据N列,c = 1的样品和2个c = 2和c = 3的样品。

+0

你认为'C'的每一个独特的价值将只有一个'N'的独特价值? – BrenBarn

+0

@BrenBarn是的,就是这样。 –

回答

1

熊猫对象现在有一个.sample方法返回行的随机数:

>>> df.groupby('c').apply(lambda g: g.n.sample(g.N.iloc[0])) 
c 
1 1 2 
2 5 6 
    2 3 
3 6 7 
    7 8 
Name: n, dtype: int64