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

如何使用Pandas的apply方法添加有序数据列(不使用for循环)

基于df.apply生成排序后的Orderd列

先看目标数据结构:

IDABCDOrderd
No18952D:2 C:5 A:8 B:9
No23179B:1 A:3 C:7 D:9
No329345294C:5 A:29 B:34 D:294

需求是基于A、B、C、D列生成“Orderd”列,将每行的列名和对应值按值升序排列后拼接成指定格式。原有的for循环实现速度太慢,改用df.apply方法优化。

实现代码

import pandas as pd

# 示例DataFrame(替换为你的实际数据)
df = pd.DataFrame({
    'ID': ['No1', 'No2', 'No3'],
    'A': [8, 3, 29],
    'B': [9, 1, 34],
    'C': [5, 7, 5],
    'D': [2, 9, 294]
})

def format_sorted_row(row):
    # 提取A-D列的键值对,按值升序排序
    sorted_items = sorted(row[['A', 'B', 'C', 'D']].items(), key=lambda x: x[1])
    # 拼接成要求的字符串格式
    return ' '.join(f'{col}:{val}' for col, val in sorted_items)

# 应用函数到每一行,生成Orderd列
df['Orderd'] = df.apply(format_sorted_row, axis=1)

说明

  • df.apply(..., axis=1)表示对每一行执行指定函数,相比手动for循环,apply内部做了批量处理优化,处理大数据集时速度会明显提升。
  • 如果数据量极大,还可以考虑用numpy的向量化排序进一步优化,但apply已经能解决大部分场景下的效率问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 13:20:51