1 回答
TA贡献1790条经验 获得超9个赞
您可以在列中使用计数器,如果小于或等于列中的值,Cell
则添加值,然后与列的连续值指定的每个组一起使用:1
Shading
numpy.where
Series.sample
GroupBy.transform
Series
g = df['Cell'].eq(1).cumsum()
df['IsShade'] = np.where(df['Cell'].le(df['Shading']), 1, 0)
df['IsShade'] = df.groupby(g)['IsShade'].transform(lambda x: x.sample(frac=1))
print (df)
Series Parallel Shading Total Cell IsShade
0 3 2 2 6 1 0
1 3 2 2 6 2 1
2 3 2 2 6 3 0
3 3 2 2 6 4 1
4 3 2 2 6 5 0
5 3 2 2 6 6 0
6 3 2 2 6 1 0
7 3 2 2 6 2 0
8 3 2 2 6 3 1
9 3 2 2 6 4 0
10 3 2 2 6 5 0
11 3 2 2 6 6 1
自定义函数的另一个想法:
def f(x):
size = x.iat[0]
total = len(x)
a = np.concatenate([np.ones(size, dtype=int), np.zeros(total - size, dtype=int)])
np.random.shuffle(a)
return a
g = df['Cell'].eq(1).cumsum()
df['IsShade'] = df.groupby(g)['Shading'].transform(f)
添加回答
举报