python - 从组中选择 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 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
因此2
fromgroup
b
已被标记,并且1
from group
a
。
我怎样才能做到这一点pandas
?
解决方案
您可以使用np.random.choice
after 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
推荐阅读
- excel - 使用 OleDbConnection 时忽略空单元格或空单元格?
- python - 虽然应该有,但在字符串中找不到匹配项
- python-3.x - KeyError: 'access_token' 在 OAuth 2.0 身份验证期间使用 Spotify API
- elasticsearch - ElasticSearch 的重新索引 api 完成后,我的目标索引的状态是什么?
- unity3d - 如何使特定的预制件在按下按钮时旋转?
- javascript - 使用 Firestore REST API 在结构化查询中设置“orderBy”
- java - Spring 将 fixedRateString 安排为 Duration
- php - PHP mysqli 子查询返回 Impossible WHERE 在读取 const 表后注意到
- html - 如何删除导航下方不需要的空格?
- css - 即使删除规则,如何完成动画?