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

如何基于整数列最大值和列表列长度对Pandas DataFrame降序排序?

解决Pandas DataFrame按整数列最大值和列表长度降序排序的问题

没问题,我来帮你搞定这个排序需求!咱们可以通过Pandas的sort_values方法轻松实现,核心思路就是:先计算列表列的长度,再同时以整数列降序和列表长度降序作为排序规则。

步骤1:先拿模拟数据举例子

先假设你的DataFrame结构是这样的,我造了个贴合需求的示例:

import pandas as pd

# 模拟你的数据结构:整数列 + 不同长度的列表列
data = {
    'int_col': [5, 10, 3, 10],
    'list_col': [[1,2], [3], [4,5,6], [7,8]]
}
df = pd.DataFrame(data)

原始DataFrame的样子:

int_col    list_col
0        5      [1, 2]
1       10         [3]
2        3  [4, 5, 6]
3       10      [7, 8]

步骤2:两种排序方法任选其一

方法一:添加临时列(直观易懂)

先给DataFrame新增一列存储列表的长度,再基于整数列和这个临时列排序:

# 生成列表长度列
df['list_length'] = df['list_col'].apply(len)

# 按整数列降序、列表长度降序排序
sorted_df = df.sort_values(by=['int_col', 'list_length'], ascending=[False, False])

# 如果不需要临时列,排序后可以删掉
sorted_df = sorted_df.drop('list_length', axis=1)

方法二:直接用key参数(更简洁,无需额外列)

利用sort_values的key参数,直接在排序时计算列表长度,省去加临时列的步骤:

sorted_df = df.sort_values(
    by=['int_col', 'list_col'],
    ascending=[False, False],
    key=lambda x: x.apply(lambda y: len(y) if isinstance(y, list) else y)
)

最终排序结果

两种方法得到的结果完全一致:

int_col    list_col
3       10      [7, 8]
1       10         [3]
0        5      [1, 2]
2        3  [4, 5, 6]

可以看到:

  • 整数列最大值10的记录排在最前面
  • 整数列值相同时,列表长度更长的[7,8](长度2)会排在[3](长度1)前面

哪怕你的数据里有空列表也不用担心,len([])会返回0,排序时会自然排在同整数组的最后。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:57:12