日期操纵期
Date manipulation periods
我在工作中遇到了这个问题。所以我有如下数据集:
Client Date Transaction Num
A 7/20/2017 1
A 7/26/2017 1
A 7/31/2017 1
A 8/23/2017 2
A 8/31/2017 2
A 9/11/2017 2
A 9/19/2017 3
A 9/27/2017 3
A 10/4/2017 3
B 6/1/2017 1
B 6/29/2017 1
B 7/6/2017 2
B 8/27/2017 3
B 9/28/2017 4
B 10/16/2017 4
B 11/30/2017 5
我需要做的是根据每个客户的日期生成交易编号如下:
对于开始日期(对于客户 A,它是 7/20/17),我需要分配一个开始交易编号 = 1。然后从这个开始日期起每 30 天,我需要增加交易一个数。所以从 7/20/17 开始的 30 天是 8/19/17,所以所有落在这个范围内的日期都会得到 transaction num = 1,那么如果超过,交易号从开始日期开始每 30 天递增 1。这种模式继续下去,所以从 2017 年 8 月 19 日开始的 30 天是 2017 年 9 月 18 日,所以这个范围内的日期得到事务编号 = 2,在 2017 年 9 月 18 日之后,得到事务编号 = 3,依此类推。
我需要为大 excel 执行此操作。任何帮助,将不胜感激。如果在 python 中更容易,也请告诉我。
谢谢,
萨米
有趣的问题,可能有多种解决方案,但我想出了以下一个:
所以在 C1 中输入这个公式:
=FLOOR(ROUND(B1-MIN(IF($A:$A=A1,$B:$B)),1)/30,1)+1
使用 CTRL+SHIFT+ENTER 确认,然后向下拖动您的公式。
注意:抱歉日期布局不同,我必须处理荷兰语版本的 Excel :)
编辑:解释
第 1 步 - 获取单元格 A1 对应的最短日期:
=MIN(IF($A:$A=A1,$B:$B))
第 2 步 - 获取单元格 B1 与最小值的差值并对其进行舍入。小数点后一位或零位无关紧要:
=ROUND(B1-MIN(IF($A:$A=A1,$B:$B)),1)
第 3 步 - 划分 30 天的差异:
=ROUND(B1-MIN(IF($A:$A=A1,$B:$B)),1)/30
第 4 步 - 确保将此结果四舍五入到下面(可能英语不好),并使用 floor 函数使其最接近您想要四舍五入的倍数。在这种情况下,它将是 1.
=FLOOR(ROUND(B1-MIN(IF($A:$A=A1,$B:$B)),1)/30,1)
第 5 步 - 现在我们只需要将此结果加 1 以防止从 0 开始
=FLOOR(ROUND(B1-MIN(IF($A:$A=A1,$B:$B)),1)/30,1)+1
全部通过CTRL+SHIFT+ENTER确认
如果日期是有序的,你可以做一个 VLOOKUP 来获取第一个并减去,但@JvdV 的答案更笼统
=INT((B2-VLOOKUP(A2,A:B,2,FALSE))/30)+1
我在工作中遇到了这个问题。所以我有如下数据集:
Client Date Transaction Num
A 7/20/2017 1
A 7/26/2017 1
A 7/31/2017 1
A 8/23/2017 2
A 8/31/2017 2
A 9/11/2017 2
A 9/19/2017 3
A 9/27/2017 3
A 10/4/2017 3
B 6/1/2017 1
B 6/29/2017 1
B 7/6/2017 2
B 8/27/2017 3
B 9/28/2017 4
B 10/16/2017 4
B 11/30/2017 5
我需要做的是根据每个客户的日期生成交易编号如下:
对于开始日期(对于客户 A,它是 7/20/17),我需要分配一个开始交易编号 = 1。然后从这个开始日期起每 30 天,我需要增加交易一个数。所以从 7/20/17 开始的 30 天是 8/19/17,所以所有落在这个范围内的日期都会得到 transaction num = 1,那么如果超过,交易号从开始日期开始每 30 天递增 1。这种模式继续下去,所以从 2017 年 8 月 19 日开始的 30 天是 2017 年 9 月 18 日,所以这个范围内的日期得到事务编号 = 2,在 2017 年 9 月 18 日之后,得到事务编号 = 3,依此类推。
我需要为大 excel 执行此操作。任何帮助,将不胜感激。如果在 python 中更容易,也请告诉我。
谢谢, 萨米
有趣的问题,可能有多种解决方案,但我想出了以下一个:
所以在 C1 中输入这个公式:
=FLOOR(ROUND(B1-MIN(IF($A:$A=A1,$B:$B)),1)/30,1)+1
使用 CTRL+SHIFT+ENTER 确认,然后向下拖动您的公式。
注意:抱歉日期布局不同,我必须处理荷兰语版本的 Excel :)
编辑:解释
第 1 步 - 获取单元格 A1 对应的最短日期:
=MIN(IF($A:$A=A1,$B:$B))
第 2 步 - 获取单元格 B1 与最小值的差值并对其进行舍入。小数点后一位或零位无关紧要:
=ROUND(B1-MIN(IF($A:$A=A1,$B:$B)),1)
第 3 步 - 划分 30 天的差异:
=ROUND(B1-MIN(IF($A:$A=A1,$B:$B)),1)/30
第 4 步 - 确保将此结果四舍五入到下面(可能英语不好),并使用 floor 函数使其最接近您想要四舍五入的倍数。在这种情况下,它将是 1.
=FLOOR(ROUND(B1-MIN(IF($A:$A=A1,$B:$B)),1)/30,1)
第 5 步 - 现在我们只需要将此结果加 1 以防止从 0 开始
=FLOOR(ROUND(B1-MIN(IF($A:$A=A1,$B:$B)),1)/30,1)+1
全部通过CTRL+SHIFT+ENTER确认
如果日期是有序的,你可以做一个 VLOOKUP 来获取第一个并减去,但@JvdV 的答案更笼统
=INT((B2-VLOOKUP(A2,A:B,2,FALSE))/30)+1