从组中选择n行

时间:2018-08-23 15:15:01

标签: python pandas

我有以下形式的数据:

second

对于每个=CONCATENATE(IF(A1="none","",A1),IF(B1="none","",B1),IF(C1="none","",C1)) ,我要随机标记import pandas as pd df = pd.DataFrame({'group':['a','a','a','b','b','b','b'], 'ref':['a1','a2','a3','b1','b2','b3','b4'], 'samps':[1,1,1,2,2,2,2]}) df group ref samps 0 a a1 1 1 a a2 1 2 a a3 1 3 b b1 2 4 b b2 2 5 b b3 2 6 b b4 2 个列中的group

预期的输出将类似于:

samps

因此,已标记来自ref group ref samps sampled 0 a a1 1 1 1 a a2 1 0 2 a a3 1 0 3 b b1 2 0 4 b b2 2 1 5 b b3 2 0 6 b b4 2 1 的{​​{1}}和来自2 group的{​​{1}}。

如何在b中做到这一点?

1 个答案:

答案 0 :(得分:2)

您可以在np.random.choice之后使用groupby,然后我们通过index分配值

l=[np.random.choice(y.index.values,y['samps'].iloc[0],replace=False) for _, y in df.groupby('group')]
df['sampled']=0
l=np.concatenate(np.array(l))#flatten to one array
df.loc[l,'sampled']=1
df
Out[341]: 
  group ref  samps  sampled
0     a  a1      1        0
1     a  a2      1        0
2     a  a3      1        1
3     b  b1      2        0
4     b  b2      2        1
5     b  b3      2        1
6     b  b4      2        0