有没有办法在excel中填充缺失的日期并添加关联值0?

bqjvbblv  于 2023-04-07  发布在  其他
关注(0)|答案(2)|浏览(283)

我在一个时间序列中有一些降雨数据,我试图在Excel中绘制。它看起来像这样:

在这种格式中,数据会遗漏没有下雨的日子,即2月2日和4日。这一点在图上显示很重要。是否有一种方法可以填充时间线中的这些空白,然后用0填充另一列?

bfnvny8b

bfnvny8b1#

您可以尝试以下操作,在单元格D1上放置以下公式(* 公式1*):

=LET(AB,A1:B5, A,TAKE(AB,,1), md,MIN(A), d,SEQUENCE(MAX(A)-md+1,,md),
 IFERROR(INDEX(AB,XMATCH(d,A),{1,2}),HSTACK(d,N(d<0))))

或者使用XLOOKUP如下:

=LET(AB,A1:B5, A,TAKE(AB,,1), md,MIN(A), d,SEQUENCE(MAX(A)-md+1,,md),
 IFERROR(HSTACK(d,XLOOKUP(d,A,DROP(AB,,1))),HSTACK(d,N(d<0))))

更新

正如@VBasic2008在评论部分所指出的,对于XLOOKUP,可以使用第四个输入参数简化方法,如下所示:

=LET(AB,A1:B5, A,TAKE(AB,,1), md,MIN(A), d,SEQUENCE(MAX(A)-md+1,,md),
 HSTACK(d,XLOOKUP(d,A,DROP(AB,,1),0)))

关于XLOOKUPINDEX/XMATCH这两个选项的性能的评论。这两个函数都可以针对大型数据集进行优化,强制二分搜索,因为日期(lookup_array)按升序排序,因此,我们可以分别在XMATCHXLOOKUP的两种情况下将输入参数search_mode设置为2。在这两种情况下使用search_mode631K行的性能方面:

  • INDEX/XMATCH版本:1.5secs平均
  • XLOOKUP版本:1sec平均值

这是预期的,因为第一个版本具有额外的函数调用:IFERROR。没有这样的额外调用,两个版本具有相同的性能,即INDEX/XMATCHXLOOKUP
对于 formula 1,它生成所有预期的日期(d),然后从输入AB中识别找到日期的行(如果不是,则在给定行上返回{#N/A,#N/A})。我们使用IFERROR生成输出。我们使用以下技巧N(d<0)生成零值的常量数组,因为Excel中的日期始终是正数
下面是输出:

0x6upsns

0x6upsns2#

=HSTACK(SEQUENCE(MAX(A:A)-MIN(A:A)+1,1,MIN(A:A),1),BYROW(SEQUENCE(MAX(A:A)-MIN(A:A)+1,1,MIN(A:A),1),LAMBDA(x,IFNA(VLOOKUP(x,A1:B5,2,FALSE),0))))

=LET(a,SEQUENCE(MAX(A:A)-MIN(A:A)+1,1,MIN(A:A),1),HSTACK(a,BYROW(a,LAMBDA(x,IFNA(VLOOKUP(x,A1:B5,2,FALSE),0)))))

使用@大卫Leal的想法,使用TAKEMINMAX中使用,因此只需要一个范围作为参数:

=LET(a,A1:B5,b,TAKE(a,,1),c,SEQUENCE(MAX(b)-MIN(b)+1,1,MIN(b),1),HSTACK(c,BYROW(c,LAMBDA(x,IFNA(VLOOKUP(x,a,2,FALSE),0)))))

结果:

或者只是简单地从开始日期向下拖动日期,并使用VLOOKUP公式也向下拖动:

=IFNA(VLOOKUP(D1,$A$1:$B$5,2,FALSE),0)

结果:

(Date示例中使用的格式为yyyy/mm/dd

相关问题