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

如何按列值及列表列长度排序DataFrame?按子女人数升序排序

解决DataFrame按列值与列表长度排序的问题

问题描述

你需要基于某列的值(这里是Employee)以及另一列中列表的长度(list_of_children的长度)对DataFrame进行排序,要求子女人数最少的员工排在最前面,且同一员工的行保持连续。

示例数据

先还原你提供的示例DataFrame(修正了输入格式错误的行):

import pandas as pd

data = {
    'Employee': ['Jonathen', 'Jonathen', 'Jonathen', 'Emily', 'Hans', 'Hans'],
    'list_of_children': [['John', 'Bob','Jennifer'], ['John', 'Bob','Jennifer'], ['John', 'Bob','Jennifer'],
                         ['Clark'], ['Watson', 'Monica'], ['Watson', 'Monica']],
    'child': ['John', 'Bob', 'Jennifer', 'Clark', 'Watson', 'Monica']
}

df = pd.DataFrame(data)

解决方案

用Pandas的sort_values()方法就能直接实现需求,不需要额外创建中间列(当然创建也可以,看个人习惯):

# 按list_of_children的长度升序排序,再按Employee列保证同员工行连续
sorted_df = df.sort_values(
    by=[df['list_of_children'].str.len(), 'Employee'],
    ascending=[True, True]
)

# 可选:重置索引让结果更整洁
sorted_df = sorted_df.reset_index(drop=True)

预期输出

执行代码后得到的排序结果完全符合你的要求:

Employee       list_of_children     child
0      Emily                [Clark]     Clark
1       Hans       [Watson, Monica]   Watson
2       Hans       [Watson, Monica]   Monica
3  Jonathen  [John, Bob, Jennifer]     John
4  Jonathen  [John, Bob, Jennifer]      Bob
5  Jonathen  [John, Bob, Jennifer]  Jennifer

关键说明

  • df['list_of_children'].str.len():直接计算每个列表的长度作为第一排序键,升序排列让子女人数少的员工优先出现
  • 第二个排序键'Employee':确保同一员工的所有行连续排列,避免出现同员工行被其他员工隔开的情况
  • 如果需要保留原始索引,去掉reset_index(drop=True)即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:19:46