如何使用Python在pandas DataFrame中筛选各分组对应的最早日期行
实现方案
首先建议先给DataFrame设置有意义的列名,方便后续操作,你需要的筛选可以用下面两种常用方法实现:
方法1:仅保留每个分组最早日期的1行(适合唯一最小值场景)
用groupby+idxmin组合,直接定位每个分组最小日期对应的行索引,再提取对应行:
# 重命名列,方便识别 fecha.columns = ['date_time', 'group_name'] # 按分组列取日期最小值对应的索引 min_date_index = fecha.groupby('group_name')['date_time'].idxmin() # 提取目标行 result = fecha.loc[min_date_index]
运行后得到的结果:
| 序号 | date_time | group_name |
|---|---|---|
| 1 | 2021-06-09 00:00:00 | a |
| 7 | 2021-06-15 00:00:00 | b |
方法2:保留每个分组所有符合最早日期的行(适合存在重复最小值场景)
如果同一分组下有多个行的日期同为最早值,用transform批量匹配:
fecha.columns = ['date_time', 'group_name'] # 生成每个分组的最小日期列 fecha['group_min_date'] = fecha.groupby('group_name')['date_time'].transform('min') # 筛选出日期等于分组最小日期的所有行 result = fecha[fecha['date_time'] == fecha['group_min_date']]
注意:你提供的构造代码中,日期列表
a长度为13,分组列表b长度为12,zip拼接时会自动丢弃a的最后一个元素,属于正常逻辑。
内容的提问来源于stack exchange,提问作者Gerald Vasquez Aleman
相关产品推荐
相关产品推荐

