gpt4 book ai didi

c# - 按组填写缺失日期

转载 作者:太空狗 更新时间:2023-10-30 00:07:06 26 4
gpt4 key购买 nike

我有一个看起来像这样的数据集:

shop_id,item_id,time,value
150,1,2015-07-10,3
150,1,2015-07-11,5
150,1,2015-07-13,2
150,2,2015-07-10,15
150,2,2015-07-12,12

在由“shop_id 和”item_id 定义的每个组中,缺少日期。

我希望将这个不规则的时间序列扩展为每个组内具有连续日期的常规时间序列:

shop_id,item_id,time,value
150,1,2015-07-10,3
150,1,2015-07-11,5
150,1,2015-07-12,0 # <~~ added
150,1,2015-07-13,2
150,2,2015-07-10,15
150,2,2015-07-11,0 # <~~ added
150,2,2015-07-12,12

对于添加的日期,相应的值应该为零。尽管我读过非常相似的问题(使用 R 或 SQL 合并),但我看到的大多数解决方案都不涉及 GROUP BY。

基本上我可以访问 SQL 数据库/我可以导出为 CSV 以进行操作,最好是在 C# 中。希望找到可以执行此类数据操作但找不到的 C# 库。

如有任何建议或帮助,我们将不胜感激!

最佳答案

您可以使用 R 中的 data.table。假设 'time' 列属于 'Date' 类,

library(data.table)#v1.9.5+
DT1 <- setDT(df1)[, list(time=seq(min(time), max(time), by ='day')),
by =.(shop_id, item_id)]
setkeyv(df1, names(df1)[1:3])[DT1][is.na(value), value:=0]
# shop_id item_id time value
#1: 150 1 2015-07-10 3
#2: 150 1 2015-07-11 5
#3: 150 1 2015-07-12 0
#4: 150 1 2015-07-13 2
#5: 150 2 2015-07-10 15
#6: 150 2 2015-07-11 0
#7: 150 2 2015-07-12 12

在开发版本中,您也可以在不设置“ key ”的情况下执行此操作。安装开发版本的说明是 here

 df1[DT1, on =c('shop_id', 'item_id', 'time')][is.na(value), value:=0]
# shop_id item_id time value
#1: 150 1 2015-07-10 3
#2: 150 1 2015-07-11 5
#3: 150 1 2015-07-12 0
#4: 150 1 2015-07-13 2
#5: 150 2 2015-07-10 15
#6: 150 2 2015-07-11 0
#7: 150 2 2015-07-12 12

或者正如@Arun 所建议的,一个更有效的选择是

 DT1[, value := 0L][df1, value := i.value, on = c('shop_id', 'item_id', 'time')]
DT1

关于c# - 按组填写缺失日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31502591/

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