python - 用 Pandas 标记分组数据集中的最后一组行
问题描述
编辑:给出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
。所以,上面, for 2015Q2
,Flag
应该只命中两行ordernumber 0108895691
之前的帖子:
我目前有一个销售订单数据集,其中每个订单都ordernumber
分为很多(即lot1
、lot2
等)。因此,每个ordernumber
. 其他相关列是帐户id
和quarter
(即 2018 年第二季度)。对于每个给定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,而不是在该给定订单中的所有行上,如果该订单号出现在多行上。
我想要的输出是在两个批次上都有一个 1orderB
id | 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
推荐阅读
- relayjs - 为什么 Relay Modern 发送 OPTIONS 请求
- java - 我需要有关 springboot 中 @PostAuthorize 方法的文档
- android - 列出将 >10 个改造调用与 rxjava2 组合在一起的子类型转换
- bash - bash中字符串插值的命令输出
- angular - Angular 6 谷歌广告词转换
- python - 如何在 sphinx 中包含模块
- javascript - 原生 javascript,处理点击,更改 url
- python - 无法使用 pyodbc 连接到 sql server
- ruby-on-rails - Rails - 在表单下拉列表中显示与用户相关的对象
- reactjs - GraphQL HOC 与子级的引用混淆 | 反应