【发布时间】:2020-01-17 14:03:50
【问题描述】:
我想将一定数量的项目分成多行。每行应该至少获得 1 个,其余的根据他们所需的份额,直到所有项目都分发完毕。 假设我们有 6 个可用,我想得到如下结果。
使用max(1, factor * available) 并不一定等于可用项目的总数。
有办法吗? 我在 spark 环境中有数据,所以最酷的方法是 pyspark 甚至是 pandas/numpy 解决方案。 显然,它可以很容易地在 python 循环中完成。
输入: 共有 6 个
+---+-------------+
| c1| factor|
+---+-------------+
| A| 0.001|
| B| 0.2|
| C| 0.2|
| D| 0.2|
| E| 0.3|
+---+-------------+
预期输出:
+---+-------------+---------+
| c1| factor| result|
+---+-------------+---------+
| A| 0.001| 1|
| B| 0.2| 1|
| C| 0.2| 1|
| D| 0.2| 1|
| E| 0.3| 2|
+---+-------------+---------+
【问题讨论】:
-
为什么说它行不通?输入应该是用户输入吗?或者它来自哪里?简单地定义列不起作用?
df['factor'] = max(1,df['factor'] * available)和available = int(input('available = '))。您可以重新调整factor使其总和1从而确保您的available得到完全分布并与factor值成比例。
标签: python pandas numpy pyspark