如何使用Pandas的apply方法添加有序数据列(不使用for循环)
基于df.apply生成排序后的Orderd列
先看目标数据结构:
| ID | A | B | C | D | Orderd |
|---|---|---|---|---|---|
| No1 | 8 | 9 | 5 | 2 | D:2 C:5 A:8 B:9 |
| No2 | 3 | 1 | 7 | 9 | B:1 A:3 C:7 D:9 |
| No3 | 29 | 34 | 5 | 294 | C: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
相关产品推荐
相关产品推荐

