我有这个工作问题。因此,我具有以下数据集:
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,因此所有在此范围内的日期都会获得交易编号= 1,如果超过该日期,则交易编号将从开始日期起每30天增加1。这种模式还在继续,因此从8/19/17开始的30天是9/18/17,因此此范围内的日期获取的交易数= 2,然后在9/18/17之后的交易数= 3,依此类推。
我需要这样做才能获得很大的成就。任何帮助,将不胜感激。如果在python中更简单,请也告诉我。
谢谢, 萨米
答案 0 :(得分:1)
有趣的问题,可能有多种解决方案,但我想出了以下一个问题:
因此在C1中输入以下公式:
=FLOOR(ROUND(B1-MIN(IF($A$1:$A$17=A1,$B$1:$B$17)),1)/30,1)+1
使用CTRL + SHIFT + ENTER进行确认,然后向下拖动公式。
注意:很抱歉日期布局的差异,我不得不处理荷兰语版本的Excel:)
编辑:说明
步骤1-获取与单元格A1相对应的最小日期:
=MIN(IF($A$1:$A$17=A1,$B$1:$B$17))
第2步-获取单元格B1与最小值的差并将其四舍五入。不管它的小数点是1还是0:
=ROUND(B1-MIN(IF($A$1:$A$17=A1,$B$1:$B$17)),1)
第3步-跨越30天的差异:
=ROUND(B1-MIN(IF($A$1:$A$17=A1,$B$1:$B$17)),1)/30
第4步-确保将此结果四舍五入到下面(可能是英语不好),并将下限函数最接近您要四舍五入的倍数。在这种情况下,它将是1。
=FLOOR(ROUND(B1-MIN(IF($A$1:$A$17=A1,$B$1:$B$17)),1)/30,1)
第5步-现在我们只需要在此结果中加1即可防止从0开始
=FLOOR(ROUND(B1-MIN(IF($A$1:$A$17=A1,$B$1:$B$17)),1)/30,1)+1
通过CTRL + SHIFT + ENTER确认所有
答案 1 :(得分:0)
如果日期按顺序排列,您可以执行VLOOKUP来获取第一个并减去,但是@JvdV的答案更为笼统
=INT((B2-VLOOKUP(A2,A:B,2,FALSE))/30)+1