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

如何删除DataFrame explode后每组的最后一行?

问题解决:移除DataFrame explode后每组的最后一行

问题背景

原始DataFrame结构:

A  B  C
0    [a, b, c]  1 22
1       [d, e]  2 45
2       [f, g]  3 32
3       [h, i]  4 64
4 [j, k, l, m]  5 76

使用df.explode('A')展开后得到:

A  B  C
0   a  1 22
0   b  1 22
0   c  1 22
1   d  2 45
1   e  2 45
2   f  3 32
2   g  3 32
3   h  4 64
3   i  4 64
4   j  5 76
4   k  5 76
4   l  5 76
4   m  5 76

需要删除每组(同索引行)的最后一行,即移除c、e、g、i、m对应的行,且数据量庞大无法手动操作。

可行解决方案

方法1:展开后分组过滤

如果已经完成explode操作,可通过分组计数定位每组最后一行并过滤:

# 先保存展开后的结果
df_exploded = df.explode('A')
# 按原索引分组,计算组内行号,排除最后一行
df_result = df_exploded[
    df_exploded.groupby(level=0).cumcount() < df_exploded.groupby(level=0).transform('size') - 1
]

原理:cumcount()给每组内的行从0开始编号,transform('size')获取每组的总行数,编号小于总行数-1的行即为除最后一行外的所有行。

方法2:展开前预处理列表(推荐大数据量场景)

直接在explode前去掉每个列表的最后元素,避免生成大量冗余行后再过滤,内存和性能更优:

# 对A列的每个列表切片,移除最后一个元素
df['A'] = df['A'].apply(lambda x: x[:-1])
# 执行explode得到目标结果
df_result = df.explode('A')

这种方法减少了中间数据量,尤其适合百万级以上的大型DataFrame。

内容的提问来源于stack exchange,提问作者Koen van Maanen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:05:34