【发布时间】:2017-12-18 02:33:41
【问题描述】:
我有一个小数据框。下面给出一个例子。
+-------+---------+---------+------+----------+
| code | surplus | deficit | gone | has come |
+-------+---------+---------+------+----------+
| 0100 | 1000 | 0 | | |
| 0103 | 0 | 100 | | |
| 0104 | 0 | 600 | | |
| 0190 | 0 | 0 | | |
| 0191 | 0 | 800 | | |
| 0192 | 500 | 0 | | |
| 0193 | 700 | 0 | | |
| 0194 | 0 | 300 | | |
| 0195 | 0 | 0 | | |
+-------+---------+---------+------+----------+
我需要将surplus 列中的数据分布,以便覆盖deficit 列中的数据。在gone 列中写下我从surplus 列中获得了多少,在has come 列中写下我为填补赤字增加了多少。从surplus 列中,我将数据作为值减少。并且总是从最大的赤字开始。
在我的示例中,它将如下所示:
为了弥补最大的赤字(在示例中这是800),我将部分价值分配给1000。
为了弥补下一个赤字(在示例中为600),我从值1000 中取出余数,然后从值700 中取出400。
为了弥补300 的不足,我取了700 的剩余部分。
最后,为了弥补赤字100,我参与了价值500。
结果应该是下一个数据帧:
+------+---------+---------+------+----------+
| code | surplus | deficit | gone | has come |
+------+---------+---------+------+----------+
| 0100 | 1000 | 0 | 1000 | 0 |
| 0103 | 0 | 100 | 0 | 100 |
| 0104 | 0 | 600 | 0 | 600 |
| 0190 | 0 | 0 | 0 | 0 |
| 0191 | 0 | 800 | 0 | 800 |
| 0192 | 500 | 0 | 100 | 0 |
| 0193 | 700 | 0 | 700 | 0 |
| 0194 | 0 | 300 | 0 | 300 |
| 0195 | 0 | 0 | 0 | 0 |
+------+---------+---------+------+----------+
surplus 和 deficit 列中的值可以不同。
我想不出这个任务的算法。如果有任何想法,我将不胜感激。
【问题讨论】:
-
所以基本上你是从把所有的盈余加起来开始的?然后,您从总盈余中尽可能多地弥补赤字?
-
@ArthurTacca 一般是这样的,但我需要从
surplus列中的最大值开始,然后按降序取其余的(我的意思是1000,@987654343 @,500)