You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对DataFrame单列每行应用带key=lambda的.sort()方法排序?

问题原因

你之前调用.apply(list.sort)失败的核心原因是:list.sort()是列表的原地修改方法,执行时直接修改原列表内容,返回值为None。直接把这个方法传给apply的话,列里的所有值都会被替换成None,自然得不到排序后的结果。

实现方案

方案1:适配你现有排序逻辑的写法

不要使用原地修改的list.sort(),改用会返回排序后新列表的内置函数sorted(),可以直接把你之前写的日期解析排序逻辑传入,无需改动原有排序规则:

import pandas as pd
from datetime import datetime

# 原数据构造
data = [
    [1, ["2017-12-06","2017-12-05","2017-12-06","2018-01-03","2018-01-04","2017-11-24"]],
    [2, ["2019-03-10","2018-12-03","2018-12-04","2018-11-08","2018-11-30","2019-03-22","2018-11-24","2019-03-06","2017-11-16"]],
]
df = pd.DataFrame(data, columns=["id", "dates"])

# 按datetime规则排序列表
df["dates"] = df["dates"].apply(
    lambda date_list: sorted(
        date_list, 
        key=lambda date_str: datetime.strptime(date_str, "%Y-%m-%d")
    )
)

方案2:高效简化写法(推荐)

你的日期字符串是标准YYYY-MM-DD格式,这类字符串的字典序和实际日期的时间顺序完全一致,不需要额外转datetime类型作为排序key,直接对字符串排序即可,数据量大时可以省去大量datetime解析的开销,代码也更简洁:

# 直接排序即可,无需类型转换
df["dates"] = df["dates"].apply(sorted)
补充:原地排序的写法

如果你一定要用list.sort()的原地排序逻辑,需要自定义函数包裹排序操作,执行完原地排序后返回列表本身,不过这种写法可读性和简洁度都不如直接用sorted():

def inplace_sort(date_list):
    # 如果需要按datetime排序,加上对应key参数即可
    date_list.sort()
    return date_list

df["dates"] = df["dates"].apply(inplace_sort)

执行排序后,两行数据的dates列结果如下:

  • id=1:['2017-11-24', '2017-12-05', '2017-12-06', '2017-12-06', '2018-01-03', '2018-01-04']
  • id=2:['2017-11-16', '2018-11-08', '2018-11-24', '2018-11-30', '2018-12-03', '2018-12-04', '2019-03-06', '2019-03-10', '2019-03-22']

内容的提问来源于stack exchange,提问作者user

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 13:57:13