所以我有两个数据列表,如下所示(缩短):
[[1.0, 1403603100],
[0.0, 1403603400],
[2.0, 1403603700],
[0.0, 1403604000],
[None, 1403604300]]
[1.0, 1403603100],
[0.0, 1403603400],
[1.0, 1403603700],
[None, 1403604000],
[5.0, 1403604300]]
我要做的是合并它们,求出每个数据集的第一个元素的总和,或者如果其中一个counter value为None,则将其设为0.0。所以上面的例子会变成这样:
^{pr2}$这就是我到目前为止的想法,如果有点笨拙的话,请道歉。在
def emit_datum(datapoints):
for datum in datapoints:
yield datum
def merge_data(data_set1, data_set2):
assert len(data_set1) == len(data_set2)
data_length = len(data_set1)
data_gen1 = emit_datum(data_set1)
data_gen2 = emit_datum(data_set2)
merged_data = []
for _ in range(data_length):
datum1 = data_gen1.next()
datum2 = data_gen2.next()
if datum1[0] is None or datum2[0] is None:
merged_data.append([0.0, datum1[1]])
continue
count = datum1[0] + datum2[0]
merged_data.append([count, datum1[1]])
return merged_data
我只能希望/假设我可以用itertools或collections做一些狡猾的事情?在
基于标识符的“binning”数据如何,即收集与一个标识符(例如1403603400)对应的所有值,然后将其相加。字典非常适合于收集与标识符(键)对应的所有值,而类型为list的defaultdict使这一点特别简单:
现在我们对数据进行了排序,并可以有条件地对其进行求和:
^{pr2}$最后一部分,为了获得您想要的列表:
这种方法要求首先混合数据集,就像在示例输入的第一个版本中一样。在
使用numpy数组,您不需要执行任何操作循环。这个如果要处理更大的数据集,请使代码更快。在
如果要使两个值都等于0.0(如果其中一个都不等于0.0),则只需要一个简单的循环。在
相关问题 更多 >
编程相关推荐