【问题标题】:Assign 1 value to random sample of group where the sample size is equal to the value of another column为样本量等于另一列值的组的随机样本分配 1 个值
【发布时间】:2020-10-24 03:35:42
【问题描述】:

我想将 1 个值随机分配给 IsShade 列(输出),以便值 1 只能分配 D 次(参见列 Shading for ex 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

【问题讨论】:

  • 请不要提供图片或链接。请查看我如何更新您的问题以供将来使用。

标签: python pandas dataframe random pandas-groupby


【解决方案1】:

您可以创建一个执行.groupby 的新列,并使用.sample 根据Shading 列中的整数随机选择x 行。从那里,我返回 TrueFalse 并转换为整数(True 变为 1False 变为 0.astype(int)):

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

【讨论】:

  • 感谢您的解决。如果 Series 列在后期阶段再次具有相同的值,我将失败例如,Series value = 3 for 6 rows 然后在后面的行中假设第 10001 行,我们再次有 value = 3 然后它不起作用。既然您正在对它进行分组,那么可能有什么解决方案?
  • @KevalShah 查看更新并用我创建的新组 s 进行测试。
  • @KevalShah 如果我已经解决了,请点击我的答案旁边的复选标记作为解决方案。谢谢!
  • 感谢您解决唯一数字问题。当我尝试在更大的数据集中运行时,它会出现错误,因为“ValueError:错误的项目数量传递了 0,放置意味着 1”
猜你喜欢
  • 2020-09-19
  • 1970-01-01
  • 2020-08-14
  • 2017-04-15
  • 2021-06-28
  • 2020-05-16
  • 2011-08-22
  • 2013-10-16
  • 2019-04-25
相关资源
最近更新 更多