我有一个项目和值的CSV,它的表示形式如下所示:
foo, 569
bar, 9842
asdasd, 98
poiqweu, 7840
oiasd, 4
poeri, 145
sacodiw, 55
aosdwr, 855
9523, 60
a52sd, 5500
sdcw, 415
0932, 317
我想导出到三个CSV,以便它们从主CSV接收项目,顺序是:highest、lowest、next highest、next lowest等
CSV1应该是:
bar, 9842
oiasd, 4
poiqweu, 7840
sacodiw, 55
其他两个CSV也是如此。你知道吗
对于奖金,我真正想做的是从一个270的主数据中创建三个CSV,每个CSV包含90个项目,这样三个CSV中的每一个都尽可能接近相同的值总和。我想有一个比我简单的(高度假设的)方法更好的方法。你知道吗
我将如何在我已经使用的python脚本中实现这一点(包括CSV和pandas,如果后者有帮助的话)?你知道吗
这是一个局部的解决方案
reorder
是功能性的,但是由于我不太熟悉pandas,所以我只使用了Python的内置数据结构。你知道吗编辑:我用贪婪的实现替换了
partition_by_sum
;它试图找到相等的和,但不注意每个箱子的项数。对更好算法的建议?这应该给你一个很好的开端。你知道吗
如果数据有N行,我会采用这种方法:
在阅读了维基百科上关于the partition problem的页面之后,我发现这个算法是the greedy algorithm的一个改编,唯一的例外是我要求所有子集具有相同的长度(如果N%3==0)。你知道吗
我编写了一个简单的代码片段来向您演示。我认为这比你提出的解决办法更好。从下面的输出中可以看到,第一个数据集包含最高值和3个最低值。你提出的解决方案会让总金额有更大的差异。你知道吗
输出:
您可以使用以下构建块来解决问题(从这里开始并不难):
使用pandas加载和排序:
然后izip在列表对之间交错元素:
相关问题 更多 >
编程相关推荐