Python中如何按NIC分组对日期时间列进行升序排序
你可以直接在sort_values的by参数中传入多个排序列,不需要额外做分组操作,就能实现相同NIC聚为一组、组内按日期升序排列的效果,代码如下:
# 匹配你给出的预期输出:NIC数值大的组排在前面,组内日期升序 df_sorted = df.sort_values( by=["NICS", "Date and Time"], key=lambda col: pd.to_datetime(col) if col.name == "Date and Time" else col, ascending=[False, True] )
如果你需要NIC数值小的组排在前面,把ascending的第一个值改为True即可。
补充说明
- 代码逻辑:
by字段传入两个列名,会先按第一个列NICS排序,保证相同NIC的行全部聚合在一起,再在相同NIC的范围内按第二个列Date and Time排序。key参数做了列判断,只有处理日期列时才转换为datetime类型做时间排序,避免修改NIC列的数值排序逻辑。 - 低版本pandas兼容方案:如果你的pandas版本低于1.1.0不支持key参数,可以先转换日期列再排序:
# 先转日期列格式 df["Date and Time"] = pd.to_datetime(df["Date and Time"]) # 多列排序 df_sorted = df.sort_values(by=["NICS", "Date and Time"], ascending=[False, True]) # 如果需要保持原来的字符串日期格式,可以加下面这行 # df_sorted["Date and Time"] = df_sorted["Date and Time"].dt.strftime("%m/%d/%Y %I:%M:%S %p")
你之前的代码只指定了日期作为唯一排序列,所以是全表按日期统一排序,没有先按NIC做聚合,才会不符合需求。
内容的提问来源于stack exchange,提问作者veganbu chat
相关产品推荐
相关产品推荐

