如何用Pandas筛选每个id对应最新分组的所有行
解决方案:按ID筛选最新日期对应分组的所有行
原始数据
首先构造示例DataFrame:
import pandas as pd data = { 'id': [1,1,1,1,2,2,2,2,3,3], 'date': ['1.1','2.1','3.1','4.1','5.2','6.2','9.2','12.2','15.3','20.3'], 'group': [3,3,5,5,2,1,1,1,15,20] } df = pd.DataFrame(data)
实现步骤
- 转换日期格式:将
date列转为可比较的datetime类型,确保日期排序准确
df['date'] = pd.to_datetime(df['date'], format='%m.%d')
- 获取每个ID的最新分组:按ID分组后,取每个组内日期最大的行对应的
group值
# 先按ID和日期排序,取每个ID的最后一行得到最新分组 latest_group = df.sort_values(['id', 'date']) \ .groupby('id') \ .last()[['group']] \ .reset_index() \ .rename(columns={'group': 'latest_group'})
- 合并并筛选数据:将原始数据与最新分组信息合并,筛选出每个ID下属于最新分组的所有行
# 合并数据 merged_df = df.merge(latest_group, on='id') # 筛选符合条件的行并移除辅助列 result = merged_df[merged_df['group'] == merged_df['latest_group']].drop(columns='latest_group')
最终结果
执行上述代码后,result的输出如下:
id date group 2 1 2023-03-01 5 3 1 2023-04-01 5 5 2 2023-06-02 1 6 2 2023-09-02 1 7 2 2023-12-02 1 9 3 2023-03-20 20
内容的提问来源于stack exchange,提问作者nena
相关产品推荐
相关产品推荐

