假设我有一些特定日期的客户数据,我想看看他们的地址是否已更改。超过那些日期。理想情况下,我想将发生更改的两列复制到新表中,或者只是获取总更改量的指标。
所以,如果我有一张像这样的桌子
Date , Customer , Address
12/31/14, Cust1, 12 Rocky Hill Rd
12/31/15, Cust1, 12 Rocky Hill Rd
12/31/16, Cust1, 14 Rocky Hill Rd
12/31/14, Cust2, 12 Testing Rd
12/31/15, Cust2, 12 Testing Ln
12/31/16, Cust2, 12 Testing Rd
我最终会计算出两次变更,客户 1 在 12/31/15 和 12/31/16 之间在 12 Rocky Hill Rd 之间进行的变更,以及 Cust2 在 12/31/14 和 12/31/15 之间进行的变更。
理想情况下我能得到一张这样的桌子
Dates , Customer , Change
12/31/15 to 12/31/16, Cust1, 12 Rocky Hill Rd to 14 Rocky Hill Rd
12/31/14 to 12/31/15, Cust2, 12 Testing Rd to 12 Testing Ln
或者甚至只是更改总数就很好了。有任何想法吗?理想情况下,我会有更多的日期,可能在这些日期之间进行多次更改,并且可能还有我想检查更改的其他列。实际上,只需对每列在某个日期期间内对客户记录的更改进行汇总就足够了。
我是熊猫的新手,不太确定从哪里开始。
编辑:
正如我在下面的解决方案中指出的那样,我希望能够传递更大的数据帧,其中不仅仅是一个地址来检测更改。例如,我在 R 中通过以下内容完成了此操作:
`在此处输入代码
`#How many changes have occured (unique values - 1)
UniLen <- function(x){
x <- length(unique(x))-1
return(x)
}
#Create a vector of Address Features to check for changes in
Address_Features <- c("AddrLine1", "AddrLine2", "AddrLine3", "CityName", "State", "ZipCodeNum", "County")
#Check for changes in each address 'use this address for description' for each customer
AddressChanges_Detail <- mktData[,c("CustomerNumEID","AddressUniqueRelationDesc",Address_Features)] %>%
group_by(CustomerNumEID, AddressUniqueRelationDesc) %>%
summarise_each(funs(UniLen))
#Summarise results (how many changes for each feature)
AddressChanges_Summary <- AddressChanges_Detail[,Address_Features] %>%
summarise_each(funs(sum))
这使我们能够计算发生了多少更改,但我错过了更改发生的日期以及功能的更改来源和更改内容...看来您提出的 Python 解决方案通过使用解决了这个问题.shift 而不仅仅是某个组的唯一值的摘要。理想情况下,我想要两全其美:)。