为了账号安全,请及时绑定邮箱和手机立即绑定

为数据框行分配 1 个随机值 - 需要帮助

为数据框行分配 1 个随机值 - 需要帮助

拉风的咖菲猫 2024-01-04 10:25:40
我想将 1 个值随机分配给 IsShade 列(输出),这样值 1 只能分配 D 次(参见 Shading 列,例如 2 次、5 次或 3 次),并且必须迭代 E 次(Total 列)例如 6 次或 8 次或 15 次)有 100 万行数据集,并附有示例输入和图像。因此,解释一下我的输入数据集:这是使用机器学习进行太阳能电池板预测的数据集。系列 X 并联 X 遮阳意味着将有 3 个串联的太阳能电池板,2 个并联的太阳能电池板,并且 6 个(3 X 2)太阳能电池板中,其中 2 个被遮挡(意味着太阳能电池板被某种物质覆盖)的阴影)因此,这里的“单元”列只是表示每个组有多少个太阳能电池板,例如 3 X 2,然后另一个也是 3 X 2,但它适用于不同的位置并具有不同的阴影值。因此,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        03         2        2      6     3        13         2        2      6     4        03         2        2      6     5        03         2        2      6     6        13         2        2      6     1        0 3         2        2      6     2        03         2        2      6     3        03         2        2      6     4        13         2        2      6     5        13         2        2      6     6        0
查看完整描述

1 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

您可以在列中使用计数器,如果小于或等于列中的值,Cell则添加值,然后与列的连续值指定的每个组一起使用:1Shadingnumpy.whereSeries.sampleGroupBy.transformSeries


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)


查看完整回答
反对 回复 2024-01-04
  • 1 回答
  • 0 关注
  • 109 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信