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

高效实现Pandas GroupBy分组内行信息合并(适配超大规模数据)

高效替代Pandas groupby+apply实现分组聚合的方案

现有实现与问题

当前通过groupby+apply实现分组后合并列信息、统计唯一值数量的代码如下:

import numpy as np
import pandas as pd
df = pd.DataFrame({"A" : ["a", "a", "b", "b", "a"], "B" : ["x", "y", "z", "w", "t"] })
groups = df.groupby("A")
strings = groups["B"].apply(lambda x : "".join(sorted(x.values + " ")))
strings2 = groups["B"].apply(lambda x : str(len(np.unique(x))) + "hello")
print(strings)
print(strings2)

输出结果:

a    t x y 
b      w z 
Name: B, dtype: object
A
a    3hello
b    2hello
Name: B, dtype: object

但apply属于非向量化操作,在百万级行、30万+分组(每组仅2-3行)的场景下,效率极低,需替换为更高效、空间友好的方案,支持直接基于原DataFrame处理。

高效解决方案

1. 分组合并排序后的B列(带空格分隔)

利用Pandas内置的向量化聚合操作,先排序再聚合,避免逐组Python循环:

import pandas as pd
df = pd.DataFrame({"A" : ["a", "a", "b", "b", "a"], "B" : ["x", "y", "z", "w", "t"] })

# 给每个B列元素添加空格,匹配原代码输出格式
df['B_with_space'] = df['B'] + ' '
# 按分组键A和B列排序,保证合并后的字符串有序
df_sorted = df.sort_values(['A', 'B'])
# 用agg执行高效的字符串拼接
strings_fast = df_sorted.groupby('A')['B_with_space'].agg(''.join)
print(strings_fast)

输出与原代码完全一致:

a    t x y 
b      w z 
Name: B_with_space, dtype: object

2. 分组统计B列唯一值数量并拼接"hello"

直接使用Pandas优化后的nunique()方法,替代apply里的len(np.unique(x)):

strings2_fast = df.groupby('A')['B'].nunique().astype(str) + 'hello'
print(strings2_fast)

输出与原代码完全一致:

A
a    3hello
b    2hello
Name: B, dtype: object

直接基于原DataFrame处理(无需单独生成分组结果)

如果需要将聚合结果合并回原DataFrame,使用transform方法:

# 合并排序后的字符串到原DataFrame
df['merged_B'] = df_sorted.groupby('A')['B_with_space'].transform(''.join)
# 统计唯一值数量并拼接hello到原DataFrame
df['count_hello'] = df.groupby('A')['B'].transform('nunique').astype(str) + 'hello'
print(df)

输出:

A  B B_with_space merged_B count_hello
0  a  x           x   t x y        3hello
1  a  y           y   t x y        3hello
2  b  z           z     w z        2hello
3  b  w           w     w z        2hello
4  a  t           t   t x y        3hello

方案优势

  • 全部采用Pandas内置的向量化操作,利用C级优化避免Python循环,大数据量下效率提升数倍甚至数十倍
  • 内存占用更友好,无额外lambda函数的调用开销
  • 代码简洁易维护,逻辑清晰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 07:53:23