python - 用一年的 1/10 重采样 df,而不是每天、每月等
问题描述
我有一个大型 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 对其进行重新采样,然后插入值列。
下面是所需的最终输出数据的示例。
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 的许多试验中,它没有结果。
有没有办法我可以使用任何其他方法或使用 pandas 中的 timedeltaindex 来实现所需的结果。
我希望我的数据以这种格式呈现,因为对重采样的任何更改都会花费我很长时间来修改我已经拥有的代码。
解决方案
在 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"
)
推荐阅读
- python - 在表格的每一行旁边添加按钮
- assembly - 汇编器消息 -> 错误:寄存器编号超出范围
- javascript - 将新图像添加到列表后防止重新渲染整个图像列表
- flask - 如何通过自动添加字符串'/foo'作为从url_for生成的url的前缀来重新定义flask中的url_for?
- python - ImportError:没有名为 google.oauth2 的模块(服务帐户)
- javascript - 在一个项目中初始化多个 DataTable 对象
- html - 在 Android 和 Apple 移动谷歌搜索引擎结果中显示我的网站更新的图标的问题
- c# - NUnit 不能像 Program 那样正确调用方法。如何正确模拟它?
- sql - SQL - 如何获取本月至今的交易计数
- java - 字符串数组返回空值