Python 为样本大小等于另一列值的组的随机样本指定1个值
我想随机为Python 为样本大小等于另一列值的组的随机样本指定1个值,python,pandas,dataframe,random,pandas-groupby,Python,Pandas,Dataframe,Random,Pandas Groupby,我想随机为IsShade列(输出)分配1个值,这样值1只能分配D次(参见列着色显示2次或5次或3次),并且必须迭代E次(总共列显示6次或8次或5次) 有100万行数据集,随附的是样本输入和图像 输入: In[1]: Sr Series Parallel Shading Total Cell 0 0 3 2 2 6 1 1 1 3 2 2 6 2
IsShade
列(输出)分配1个值,这样值1只能分配D次(参见列着色显示2次或5次或3次),并且必须迭代E次(总共列显示6次或8次或5次)
有100万行数据集,随附的是样本输入和图像
输入:
In[1]:
Sr Series Parallel Shading Total Cell
0 0 3 2 2 6 1
1 1 3 2 2 6 2
2 2 3 2 2 6 3
3 3 3 2 2 6 4
4 4 3 2 2 6 5
5 5 3 2 2 6 6
6 6 4 2 5 8 1
7 7 4 2 5 8 2
8 8 4 2 5 8 3
9 9 4 2 5 8 4
10 10 4 2 5 8 5
11 11 4 2 5 8 6
12 12 4 2 5 8 7
13 13 4 2 5 8 8
14 14 5 1 3 5 1
15 15 5 1 3 5 2
16 16 5 1 3 5 3
17 17 5 1 3 5 4
18 18 5 1 3 5 5
如果你能帮助我在如何实现或python代码那将是很有帮助的。谢谢你,非常感谢
Example Expected Output:
Out[1]:
Sr Series Parallel Shading Total Cell IsShade
0 0 3 2 2 6 1 0
1 1 3 2 2 6 2 0
2 2 3 2 2 6 3 1
3 3 3 2 2 6 4 0
4 4 3 2 2 6 5 0
5 5 3 2 2 6 6 1
6 6 4 2 5 8 1 1
7 7 4 2 5 8 2 0
8 8 4 2 5 8 3 1
9 9 4 2 5 8 4 1
10 10 4 2 5 8 5 0
11 11 4 2 5 8 6 0
12 12 4 2 5 8 7 1
13 13 4 2 5 8 8 1
14 14 5 1 3 5 1 0
15 15 5 1 3 5 2 1
16 16 5 1 3 5 3 0
17 17 5 1 3 5 4 1
18 18 5 1 3 5 5 1
您可以创建一个新列,该列执行
.groupby
,并使用.sample
根据着色
列中的整数随机选择x行数。从那里,我返回True
或False
,并将其转换为整数(True
变为1
,False
变为0
,带。astype(int)
):
请不要图片或链接。请看我如何更新您的问题以备将来使用。谢谢您的解答。如果序列列在后面的阶段再次具有相同的值,我将失败,例如,序列值为6行=3,那么在后面的行中,比如说第10001行,我们再次具有值=3,那么它不工作。由于您正在对其进行分组,解决方案可能是什么?@KevalShah请参阅更新,并使用我创建的新组
s
进行测试。@KevalShah如果已解决,请单击我的答案旁边的复选标记,接受为解决方案。非常感谢。感谢您为唯一数字解决此问题。当我尝试在一个更大的数据集中运行时,出现的错误是“ValueError:传递的项数错误0,placement暗示1”
s = df['Series'].ne(df['Series'].shift()).cumsum() #s is a unique identifier group
df['IsShade'] = (df.groupby(s, group_keys=False)
.apply(lambda x: x['Shading'].sample(x['Shading'].iloc[0])) > 0)
df['IsShade'] = df['IsShade'].fillna(False).astype(int)
df
Out[1]:
Sr Series Parallel Shading Total Cell IsShade
0 0 3 2 2 6 1 0
1 1 3 2 2 6 2 0
2 2 3 2 2 6 3 0
3 3 3 2 2 6 4 0
4 4 3 2 2 6 5 1
5 5 3 2 2 6 6 1
6 6 4 2 5 8 1 1
7 7 4 2 5 8 2 1
8 8 4 2 5 8 3 0
9 9 4 2 5 8 4 0
10 10 4 2 5 8 5 1
11 11 4 2 5 8 6 1
12 12 4 2 5 8 7 1
13 13 4 2 5 8 8 0
14 14 5 1 3 5 1 1
15 15 5 1 3 5 2 0
16 16 5 1 3 5 3 0
17 17 5 1 3 5 4 1
18 18 5 1 3 5 5 1