Python 如何按不同字段识别保单续签

Python 如何按不同字段识别保单续签,python,pandas,numpy,if-statement,where-clause,Python,Pandas,Numpy,If Statement,Where Clause,我想做的是计算不同销售树的续约次数 在编号为“015 ABN”的情况下,客户始终与同一家“公司”续约两次,与“老板2”续约两次,但与不同的“卖家”(卖家1、卖家2)续约 这就是我试过的 data['renewal']=(np.where(data.NumberPlate==data.NumberPlate.shift(),1,np.nan)) 这个信息告诉我,当我只比较两年的时候,有一个对我有效的装修,但我不知道如何考虑销售树的领域 另一个让我有点复杂的问题是续约日期的不同。在减法中,我将其与d

我想做的是计算不同销售树的续约次数

在编号为“015 ABN”的情况下,客户始终与同一家“公司”续约两次,与“老板2”续约两次,但与不同的“卖家”(卖家1、卖家2)续约

这就是我试过的

data['renewal']=(np.where(data.NumberPlate==data.NumberPlate.shift(),1,np.nan)) 这个信息告诉我,当我只比较两年的时候,有一个对我有效的装修,但我不知道如何考虑销售树的领域

另一个让我有点复杂的问题是续约日期的不同。在减法中,我将其与data['difference']=(np.where(data.NumberPlate==data.NumberPlate.shift(),data.Expedition_Date.diff(),np.nan))一起使用

这将创建一个差值为天的字段,但返回的值为“366天04:01:19.177000000”,但我必须减去以天为单位显示的年份。我必须减去365天

我在每次登记中提出三个不同的案例。一些客户忠诚于与公司续约,其他客户与老板续约,其他客户与卖家续约

如果你能帮我,我将不胜感激

seller  sellers_boss    Company NumberPlate Expedition_Date effective_date  year    difference  renewal_Company Renewal_sellers_boss    Renewal_seller
Seller  1   Boss  1 Global Company_1    015ABN  2015-05-14 08:37:48.000 2015-05-15 08:37:48.000 2015    0   1   1   1
Seller  1   Boss  2 Global Company_1    015ABN  2016-05-13 12:39:07.177 2016-05-15 08:37:48.000 2016    2   2   1   1
Seller  2   Boss  2 Global Company_1    015ABN  2017-05-12 17:01:39.900 2017-05-15 08:37:48.000 2017    3   3   2   1
Seller 1    Boss  1 Global Company_1    016ZYX  2015-05-15 08:37:48.000 2015-05-15 08:37:48.000 2014    0   1   1   1
Seller 1    Boss  1 Global Company_1    016ZYX  2016-05-12 12:39:07.177 2016-05-15 12:39:07.177 2015    3   2   2   2
Seller 1    Boss  1 Global Company_1    016ZYX  2017-05-11 17:01:39.900 2017-05-15 17:01:39.900 2016    4   3   3   3
Seller 1    Boss  1 Global Company_1    016ZYX  2018-05-14 17:01:39.900 2018-05-15 17:01:39.900 2017    1   4   4   4
Seller 1    Boss  1 Global Company_1    016ZYX  2019-05-15 17:01:39.900 2019-05-15 17:01:39.900 2018    0   5   5   5
Seller 1    Boss  1 Global Company_1    025ABC  2015-05-15 08:37:48.000 2015-05-15 08:37:48.000 2014    0   1   1   1
Seller 1    Boss  1 Global Company_1    025ABC  2016-05-13 12:39:07.177 2016-05-15 12:39:07.177 2015    2   2   2   2
Seller 2    Boss  1 Global Company_1    025ABC  2017-05-10 17:01:39.900 2017-05-15 17:01:39.900 2016    5   3   3   1
Seller 1    Boss  1 Global Company_2    025ABC  2018-05-14 17:01:39.900 2018-05-15 17:01:39.900 2017    4   1   1   1
Seller 1    Boss  1 Global Company_2    025ABC  2019-05-15 17:01:39.900 2019-05-15 17:01:39.900 2018    0   2   2   2
下一级

d=data.groupby(['Company','sellers_boss'])['NumberPlate'].apply(lambda x : x.ne(x.shift()).ne(0).cumsum())
data['Renewal_seller_boss']=data.groupby([data.sellers_boss,data.Company,d]).cumcount()+1
下一级

q=data.groupby(['Company','sellers_boss','seller'])['NumberPlate'].apply(lambda x : x.ne(x.shift()).ne(0).cumsum())
data['Renewal_seller']=data.groupby([data.Company,data.sellers_boss,data.seller,q]).cumcount()+1

你需要格式化你的问题。几乎不可能理解这些数据。使用控件k格式化代码和数据r=data.groupby(['Company'])['NumberPlate'].apply(lambda x:x.ne(x.shift()).ne(0.cumsum())data['Renewal_Company']=data.groupby([data.Company,r]).cumcount()+1此代码适用于此选项=data.groupby(['Company','sellers\u boss'])['NumberPlate']).apply(lambda x:x.ne(x.shift()).ne(0.cumsum())数据['Renewal\u sellers\u boss']=data.groupby([data['sellers\u boss',s]).cumcount()+1此选项无效k=data.groupby(['Company','sellers\u boss','sellers'])['NumberPlate'].apply(lambda x:x.ne(x.shift()).ne(0.cumsum())数据['Renewal\u sellers']=data.groupby([data['sellers',k]).cumcount()+1此选项无效
q=data.groupby(['Company','sellers_boss','seller'])['NumberPlate'].apply(lambda x : x.ne(x.shift()).ne(0).cumsum())
data['Renewal_seller']=data.groupby([data.Company,data.sellers_boss,data.seller,q]).cumcount()+1