日期操纵期

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