如何在不丢失日期分组的前提下基于其他值对Pandas字段排序
问题原因
- 调用
sort_by(['Model','Horse Power'])报KeyError,大概率是列名拼写和实际不符,请确认Horse Power的空格、大小写和你表中实际列名完全一致。 - 直接按
Horse Power排序会打乱日期分组,是因为你没有把Date作为第一排序键,且Date列存在空值,空值排序时会被归为一类,无法正确区分原有日期分组。
解决方法
你需要先补全Date列的空值,再按规则排序,最后可按需还原合并单元格的展示效果:
如果你使用Polars(调用sort_by方法)
import polars as pl # 1. 向前填充Date列空值,补全所有行的日期信息 # 2. 先按Date升序保留原有日期顺序,再按Horse Power降序实现分组内排序 # 3. 可选:将重复的Date值替换为空,还原你原本的展示格式 df = df.with_columns( pl.col("Date").forward_fill() ).sort( by=["Date", "Horse Power"], descending=[False, True] ).with_columns( pl.when(pl.col("Date") == pl.col("Date").shift(1)) .then(pl.lit("")) .otherwise(pl.col("Date")) .alias("Date") )
如果你使用Pandas
import pandas as pd # 1. 向前填充Date列空值 df["Date"] = df["Date"].ffill() # 2. 按Date升序、马力降序排序 df = df.sort_values(by=["Date", "Horse Power"], ascending=[True, False]) # 3. 可选:还原合并单元格展示效果 df.loc[df["Date"] == df["Date"].shift(1), "Date"] = ""
内容的提问来源于stack exchange,提问作者user14873872
相关产品推荐
相关产品推荐

