编辑:下面的问题给出下面建议的df.assign(Flag=1 - df.duplicated(['id', 'quarter', 'lot'], keep='last'))
方法
index mkid ordernumber quarter lotnumber1 order_xldate Flag
441670 10176228 0108595504 2015Q2 12947-1 2015-04-09 0
441211 10176228 0108663905 2015Q2 12947-1 2015-04-29 1
450008 10176228 0108663905 2015Q2 129161 2015-04-29 1
440268 10176228 0108779992 2015Q2 12987-1 2015-05-29 0
448187 10176228 0108779992 2015Q2 12848-1 2015-05-29 1
439085 10176228 0108895691 2015Q2 12987-1 2015-06-29 1
446123 10176228 0108895691 2015Q2 12965-1 2015-06-29 1
419419 10176228 0109003405 2015Q3 12969-1 2015-07-27 1
429893 10176228 0109003405 2015Q3 12987-1 2015-07-27 1
426850 10176228 0109241988 2015Q3 13929 2015-09-15 1
384762 10176228 0109385611 2015Q4 K10127 2015-10-09 1
Flag
字段将应用于给定季度中的每个ordernumber
,而不是最后一个ordernumber
。因此,在上面,对于2015Q2
,Flag
应该只对ordernumber 0108895691
的两行都命中之前的帖子:
我目前有一个销售订单数据集,其中每个
ordernumber
都分为很多批次(即lot1
,lot2
等)。因此,每个ordernumber
可能有不同的行。其他相关列是帐户id
和quarter
(即2018Q2)。对于每个给定id
中的每个给定quarter
,我想使用Pandas / Python将标志应用于该给定季度内最后一个订单的所有批次。有什么建议吗?目前有:
masterDF['FLAG'] = masterDF.groupby(by=['id','quarter'],as_index=False)['ordernumber'].nth(-1)
masterDF['LAST_ORDER_OF_QUARTER'] = np.where(masterDF['FLAG'].isnull(),0,1)
但这只会在该ID /季度/订单组合的最后一行上放置1,而不是在给定订单内的所有行上放置1(如果该订单号出现在多行上)。
我想要的输出是在两个
orderB
上都设置为1id | quarter | ordernumber | lot | Last Order of Quarter
----------------------------------------------------------------------------
A | 2018Q1 | orderA | lot1 | 0
A | 2018Q1 | orderB | lot1 | 1
A | 2018Q1 | orderB | lot2 | 1
代替:
id | quarter | ordernumber | lot | Last Order of Quarter
----------------------------------------------------------------------------
A | 2018Q1 | orderA | lot1 | 0
A | 2018Q1 | orderB | lot1 | 0
A | 2018Q1 | orderB | lot2 | 1
有什么建议吗?
最佳答案
使用duplicated
df.assign(Flag=1 - df.duplicated(['id', 'quarter', 'lot'], keep='last'))
id quarter ordernumber lot Flag
0 A 2018Q1 orderA lot1 0
1 A 2018Q1 orderB lot1 1
2 A 2018Q1 orderB lot2 1
一样
df.assign(**{'Last Order': 1 - df.duplicated(['id', 'quarter', 'lot'], keep='last')})
id quarter ordernumber lot Last Order
0 A 2018Q1 orderA lot1 0
1 A 2018Q1 orderB lot1 1
2 A 2018Q1 orderB lot2 1