【发布时间】:2017-03-22 17:57:52
【问题描述】:
假设我有一些日期的客户数据,我想看看他们的地址是否发生了变化。在那些日期。理想情况下,我想将发生更改的两列复制到一个新表中,或者只是获取总更改量的指标。
所以,如果我有一张这样的桌子
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 之间的 Rocky Hill Rd 12 号之间的更改以及 Cust2 在 14 年 12 月 31 日和 2015 年 12 月 31 日之间的更改。
理想情况下我可以得到一张这样的桌子
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
或者甚至只是更改的总数会很棒。有任何想法吗?理想情况下,我会有更多的日期,可能在这些日期之间进行多次更改,并且可能还有我希望检查更改的其他列。实际上,只需汇总每个列在某个日期期间对客户记录的更改就足够了。
我是 Panda 的新手,不太确定从哪里开始。
编辑: 正如我在下面的解决方案中所指出的,我希望能够传递一个更大的数据帧,而不仅仅是一个地址来检测变化。例如,我已经在 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 而不仅仅是某个组的唯一值的摘要。理想情况下,我想要两全其美:)。
【问题讨论】:
标签: python pandas difference array-difference