python - Python pandas获取数据框中组的第一个和最后一个索引,如果第一个也是最后一个则重复
问题描述
我正在努力获取数据框中第一次和最后一次出现的 ID 的索引。但如果 ID 只出现一次,那么最后一次出现与第一次出现相同。
例如,这样的数据:
ID Date
A 1/1/2015
A 1/5/2016
A 1/3/2017
B 1/3/2017
C 1/5/2016
C 1/7/2016
输出将是
ID Index Date
A 0 1/1/2015
A 2 1/3/2017
B 3 1/3/2017
B 3 1/3/2017
C 4 1/5/2016
C 5 1/5/2016
注意:我真的不需要索引,它只是为了让问题更清楚。
我尝试过使用data.groupby('ID', as_index=False).nth([0,-1])
,但在上面的示例中,这只会输出 B 一次。
提前致谢
解决方案
pd.concat
pd.concat([d.iloc[[0, -1]] for _, d in df.groupby('ID')])
ID Date
0 A 1/1/2015
2 A 1/3/2017
3 B 1/3/2017
3 B 1/3/2017
4 C 1/5/2016
5 C 1/7/2016
使用agg
df.groupby('ID').agg(['first', 'last']).stack().reset_index('ID')
ID Date
first A 1/1/2015
last A 1/3/2017
first B 1/3/2017
last B 1/3/2017
first C 1/5/2016
last C 1/7/2016
推荐阅读
- javascript - getContext("2d") 不是函数
- react-hooks - 为什么我的计时器挂钩不更新它的内部状态?
- python - 即使我使用的是 nohup,Sagemaker 生命周期配置文件也会因超时而失败
- java - 在 Java 中使用集合时如何改进时间?
- drop-down-menu - 关于如何根据下拉菜单的选择显示和隐藏 DIV 的后续问题
- python - 在 mssql+pyodbc 和 sqlalchemy 中使用给定时间搜索和更新 datetime 列
- svg - FireFox 上的 SVG getScreenCTM()
- ubuntu - 如何在保持 WR 和有时 R 权限的同时限制 ubuntu 中多级用户的访问(囚禁他们)
- sitecore - Sitecore JSS 限制在链接字段中检索到的项目的深度
- scala - 使用 RDD.mapPartitionsWithIndex 时如何获取每个分区的索引?