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