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

如何高效合并两个Pandas分类列为单个分类列且避免内存占用过高

Pandas 双分类列高效拼接为分类列方案

核心思路是绕过逐行字符串拼接的高开销操作,直接利用分类列底层的整数编码做运算,仅对实际出现的唯一分类组合做字符串拼接,从根本上降低内存占用和计算量。

实现代码

import pandas as pd
import numpy as np

# 你的原DataFrame,x和y均为category类型
# df = ... 

# 提取分类列的底层整数编码和分类标签集合
x_codes = df['x'].cat.codes.values
y_codes = df['y'].cat.codes.values
x_cats = df['x'].cat.categories
y_cats = df['y'].cat.categories

# 对编码组合去重,生成新的分类编码
combined_code_pairs = np.rec.fromarrays([x_codes, y_codes])
new_codes, unique_pairs = pd.factorize(combined_code_pairs, sort=False)

# 仅为唯一组合生成拼接后的分类标签
new_categories = [f"{x_cats[x]} - {y_cats[y]}" for x, y in unique_pairs]

# 直接构造category类型的新列
df['z'] = pd.Categorical.from_codes(new_codes, new_categories)

性能优势

  1. 内存占用极低:全程操作的是整数编码数组,50万行数据的编码数组总内存占用不到2MB,仅当生成最终分类标签时才会拼接字符串,且仅拼接唯一出现的组合,完全避免了逐行字符串复制的冗余开销。对比原转字符串拼接的方案,内存占用可降低90%以上。
  2. 计算耗时短:跳过了50万行长字符串的类型转换和拼接操作,仅需对唯一组合做少量字符串拼接,重复率越高性能优势越明显,比原方案快3~10倍。

如果需要生成的分类列按拼接后的字符串字典序排序,只需将pd.factorize的sort参数设置为True即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:15:03