我在一个时间序列中有一些降雨数据,我试图在Excel中绘制。它看起来像这样:
在这种格式中,数据会遗漏没有下雨的日子,即2月2日和4日。这一点在图上显示很重要。是否有一种方法可以填充时间线中的这些空白,然后用0填充另一列?
bfnvny8b1#
您可以尝试以下操作,在单元格D1上放置以下公式(* 公式1*):
D1
=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如下:
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)))
关于XLOOKUP和INDEX/XMATCH这两个选项的性能的评论。这两个函数都可以针对大型数据集进行优化,强制二分搜索,因为日期(lookup_array)按升序排序,因此,我们可以分别在XMATCH和XLOOKUP的两种情况下将输入参数search_mode设置为2。在这两种情况下使用search_mode的631K行的性能方面:
INDEX/XMATCH
XMATCH
2
631K
1.5secs
1sec
这是预期的,因为第一个版本具有额外的函数调用:IFERROR。没有这样的额外调用,两个版本具有相同的性能,即INDEX/XMATCH与XLOOKUP。对于 formula 1,它生成所有预期的日期(d),然后从输入AB中识别找到日期的行(如果不是,则在给定行上返回{#N/A,#N/A})。我们使用IFERROR生成输出。我们使用以下技巧N(d<0)生成零值的常量数组,因为Excel中的日期始终是正数下面是输出:
IFERROR
d
AB
{#N/A,#N/A}
N(d<0)
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的想法,使用TAKE在MIN,MAX中使用,因此只需要一个范围作为参数:
TAKE
MIN
MAX
=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公式也向下拖动:
VLOOKUP
=IFNA(VLOOKUP(D1,$A$1:$B$5,2,FALSE),0)
(Date示例中使用的格式为yyyy/mm/dd)
yyyy/mm/dd
2条答案
按热度按时间bfnvny8b1#
您可以尝试以下操作,在单元格
D1
上放置以下公式(* 公式1*):或者使用
XLOOKUP
如下:更新
正如@VBasic2008在评论部分所指出的,对于
XLOOKUP
,可以使用第四个输入参数简化方法,如下所示:关于
XLOOKUP
和INDEX/XMATCH
这两个选项的性能的评论。这两个函数都可以针对大型数据集进行优化,强制二分搜索,因为日期(lookup_array)按升序排序,因此,我们可以分别在XMATCH
和XLOOKUP
的两种情况下将输入参数search_mode设置为2
。在这两种情况下使用search_mode的631K
行的性能方面:INDEX/XMATCH
版本:1.5secs
平均XLOOKUP
版本:1sec
平均值这是预期的,因为第一个版本具有额外的函数调用:
IFERROR
。没有这样的额外调用,两个版本具有相同的性能,即INDEX/XMATCH
与XLOOKUP
。对于 formula 1,它生成所有预期的日期(
d
),然后从输入AB
中识别找到日期的行(如果不是,则在给定行上返回{#N/A,#N/A}
)。我们使用IFERROR
生成输出。我们使用以下技巧N(d<0)
生成零值的常量数组,因为Excel中的日期始终是正数下面是输出:
0x6upsns2#
或
使用@大卫Leal的想法,使用
TAKE
在MIN
,MAX
中使用,因此只需要一个范围作为参数:结果:
或者只是简单地从开始日期向下拖动日期,并使用
VLOOKUP
公式也向下拖动:结果:
(Date示例中使用的格式为
yyyy/mm/dd
)