为所需的dataframe行随机分配1个值

2024-09-27 23:27:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我想随机为IsShade列(输出)分配1个值,这样值1只能分配D次(参见列着色2次或5次或3次),并且必须迭代E次(总计列6次或8次或15次)

有100万行数据集,随附的是样本输入和图像

因此,解释我的输入数据集: 这是针对使用ML的太阳能电池板预测。串联X并联X阴影表示将有3个太阳能电池板串联连接,2个太阳能电池板并联连接,在6(3 X 2)个太阳能电池板中,有2个被阴影覆盖(表示太阳能电池板被某种阴影覆盖)

所以,这里的电池柱只是表示每个组有多少个太阳能电池板,比如3x2,然后另一个也是3x2,但它是针对不同的位置和不同的着色值

因此,IsShade列的输出应在1到(3 X 2)的范围内,即6行,任何随机X行(着色列值)应标记为1,其余为每组的0值。对于另外5-11行,也应该发生同样的情况,但随机位置行不同。我希望你能了解它的要点。对不起,解释得不清楚

输入:

在[1]中:

Series Parallel  Shading Total  Cell 
3         2        2      6     1         
3         2        2      6     2        
3         2        2      6     3        
3         2        2      6     4        
3         2        2      6     5        
3         2        2      6     6        
3         2        2      6     1        
3         2        2      6     2        
3         2        2      6     3        
3         2        2      6     4        
3         2        2      6     5        
3         2        2      6     6     
       

如果你能帮助我在如何实现或python代码那将是很有帮助的。谢谢你,非常感谢

预期产出示例:

出[1]:

Series Parallel  Shading Total  Cell  IsShade 
3         2        2      6     1        0 
3         2        2      6     2        0
3         2        2      6     3        1
3         2        2      6     4        0
3         2        2      6     5        0
3         2        2      6     6        1
3         2        2      6     1        0 
3         2        2      6     2        0
3         2        2      6     3        0
3         2        2      6     4        1
3         2        2      6     5        1
3         2        2      6     6        0


Tags: 数据图像parallelcellseriestotal样本总计
1条回答
网友
1楼 · 发布于 2024-09-27 23:27:11

您可以在Cell列中使用计数器,如果1列中的Shading列小于或等于Shading列,则添加1值,然后在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)

相关问题 更多 >

    热门问题