我有一个大型的csv文件,其中有大约100个不同品牌的20多年的录音。包含在csv文件中并按年份分组的原始数据的示例如下所示。
name year value
brand1 2000 3
brand2 2000 3
brand3 2000 1
brand4 2000 0
brand5 2000 3
brand6 2000 1
brand7 2000 1
brand8 2000 3
brand9 2000 1
brand10 2000 3
brand11 2000 1
brand12 2000 0
brand13 2000 0
brand14 2000 3
brand15 2000 3
brand16 2000 0
brand17 2000 0
brand18 2000 0
brand19 2000 1
brand20 2000 0
brand1 2001 6
brand2 2001 4
brand3 2001 2
brand4 2001 1
brand5 2001 4
brand6 2001 2
brand7 2001 4
brand8 2001 4
brand9 2001 1
brand10 2001 6
brand11 2001 4
brand12 2001 0
brand13 2001 0
brand14 2001 3
brand15 2001 4
brand16 2001 1
brand17 2001 0
brand18 2001 0
brand19 2001 4
brand20 2001 3
我能够每天,每月,每季度等对它进行重新采样。 经过第三天的努力,现在我仍然无法按名称对数据进行分组并使用一年的1/10重新采样,然后对value列进行插值。
下面是所需最终输出数据的示例。
name year value
brand1 1999 0.0
brand1 1999.1 0.3
brand1 1999.2 0.6
brand1 1999.3 0.9
brand1 1999.4 1.2
brand1 1999.5 1.5
brand1 1999.6 1.8
brand1 1999.7 2.1
brand1 1999.8 2.4
brand1 1999.9 2.7
brand1 2000 3.0
brand1 2000 3.0
brand1 2000.1 3.3
brand1 2000.2 3.6
brand1 2000.3 3.9
brand1 2000.4 4.2
brand1 2000.5 4.5
brand1 2000.6 4.8
brand1 2000.7 5.1
brand1 2000.8 5.4
brand1 2000.9 5.7
brand1 2001 6.0
我希望csv中的所有数据看起来像这样。
在许多使用TimedeltaIndex的试验中,结果没有结果。
有没有办法我可以使用任何其他方法或在熊猫中使用timedeltaindex进行插值以达到所需的结果。
我希望我的数据以这种格式显示,因为对重采样的任何更改都将花费我很长时间来修改我已经拥有的代码。
答案 0 :(得分:1)
在R中,我们可以使用library(data.table)
dt[dt[, .(year = seq.int(year[1], year[.N], 0.1)), by=name], on=c('year', 'name')][,
value := zoo::na.approx(value, na.rm = FALSE)]
哪个给
# name year value
# 1: brand1 2000.0 3.0
# 2: brand1 2000.1 3.3
# 3: brand1 2000.2 3.6
# 4: brand1 2000.3 3.9
# 5: brand1 2000.4 4.2
# ---
# 216: brand20 2000.6 1.8
# 217: brand20 2000.7 2.1
# 218: brand20 2000.8 2.4
# 219: brand20 2000.9 2.7
# 220: brand20 2001.0 3.0
数据:
dt = fread("
name year value
brand1 2000 3
brand2 2000 3
brand3 2000 1
brand4 2000 0
brand5 2000 3
brand6 2000 1
brand7 2000 1
brand8 2000 3
brand9 2000 1
brand10 2000 3
brand11 2000 1
brand12 2000 0
brand13 2000 0
brand14 2000 3
brand15 2000 3
brand16 2000 0
brand17 2000 0
brand18 2000 0
brand19 2000 1
brand20 2000 0
brand1 2001 6
brand2 2001 4
brand3 2001 2
brand4 2001 1
brand5 2001 4
brand6 2001 2
brand7 2001 4
brand8 2001 4
brand9 2001 1
brand10 2001 6
brand11 2001 4
brand12 2001 0
brand13 2001 0
brand14 2001 3
brand15 2001 4
brand16 2001 1
brand17 2001 0
brand18 2001 0
brand19 2001 4
brand20 2001 3"
)