Pandas:按报表名称筛选最新更新行并保持Order列排序
实现方法
1. 转换时间列格式
原始Last Updated列是字符串类型,无法直接比较时间先后,先将其转为可运算的datetime类型:
df['Last Updated'] = pd.to_datetime(df['Last Updated'], format='%b %d %I:%M:%S %p')
2. 分组筛选最新行
借助pandas的分组功能,按Report Name分组后,直接提取每个组内Last Updated值最大(最新)的行:
latest_rows = df.loc[df.groupby('Report Name')['Last Updated'].idxmax()]
3. 按Order列排序
最后对筛选出的结果按Order列升序排列,得到和示例一致的输出:
final_df = latest_rows.sort_values('Order').reset_index(drop=True)
完整代码示例
import pandas as pd # 处理时间列格式 df['Last Updated'] = pd.to_datetime(df['Last Updated'], format='%b %d %I:%M:%S %p') # 提取每个报表的最新行 latest_df = df.loc[df.groupby('Report Name')['Last Updated'].idxmax()] # 按Order列排序 final_df = latest_df.sort_values('Order').reset_index(drop=True) # 打印结果 print(final_df)
这种方式完全依赖pandas的内置向量操作,不需要手动写循环,效率远高于逐行判断的方法,数据量越大优势越明显。
内容的提问来源于stack exchange,提问作者Andrew Mitchell
相关产品推荐
相关产品推荐

