首页 > 解决方案 > 从组中选择 n 行

问题描述

我有以下形式的数据:

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我想随机标记cols sampsref

预期输出将类似于:

  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

因此2fromgroup b已被标记,并且1from group a

我怎样才能做到这一点pandas

标签: pythonpandas

解决方案


您可以使用np.random.choiceafter 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

推荐阅读