我有以下形式的数据:
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
中做到这一点?
答案 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