gpt4 book ai didi

ruby - CSV - 处理某些字段具有相同值的每组连续行

转载 作者:行者123 更新时间:2023-12-05 00:47:14 25 4
gpt4 key购买 nike

我有一个包含以下标题的大型 CSV 文件:“sku”、“year”、“color”、“price”、“discount”、“inventory”、“published_on”、“rate”、“demographic”和“标签”。

我想对“sku”、“year”和“color”具有相同值的每个连续行组执行各种计算。我将文件的这个分区称为每个行组。例如,如果文件如下所示:

sku,year,color,price,discount,...
100,2019,white,24.61,2.3,...
100,2019,white,29.11,2.1,...
100,2019,white,33.48,2.9,...
100,2019,black,58.12,1.3,...
200,2018,brown,44.15,3.1,...
200,2018,brown,53.07,3.2,...
100,2019,white,16.91,2.9,...

将有四组行:第 1、2 和 3 行(在标题行之后),单独的第 4 行,单独的第 5 行和第 6 行以及单独的第 7 行。请注意,最后一行不包含在第一组中,即使它的前三个字段具有相同的值。这是因为它与第一组不连续。

可能对每组行执行的计算示例是确定该组的总库存。通常,要计算的度量是包含在行组的所有行中的值的某个函数。每组行的具体计算不是我的问题的核心。让我们简单地假设每组行都传递给某个返回感兴趣度量的方法。

我希望返回一个数组,其中每组行包含一个元素,每个元素(可能是数组或散列)包含“sku”、“year”和“color”的公共(public)值以及计算出的感兴趣的度量。

因为文件很大,所以必须逐行读取,而不是将其压缩到一个数组中。

执行此操作的最佳方法是什么?

最佳答案

Enumerator#chunk 非常适合这个。

CSV.foreach('path/to/csv', headers: true).
chunk { |row| row.values_at('sku', 'year', 'color') }.
each do |(sku, year, color), rows|
# process `rows` with the current `[sku, year, color]` combination
end

显然,最后的 each 可以根据需要替换为 mapflat_map

关于ruby - CSV - 处理某些字段具有相同值的每组连续行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59315724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com