在Pandas中处理列表列:统计零值数量与提取末尾元素
高效处理含变长列表的DataFrame列计算
问题场景
给定如下结构的DataFrame,Score列包含不同长度的列表,需要新增两列:
- 零值总数:每行
Score列表中0的个数 - 最后一个元素:每行
Score列表的最后一个元素
且需适配200万+行的大规模数据,避免低效的逐行循环。
原始DataFrame构造代码
import pandas as pd score = [[0,1,0,3],[0,2,6,4,0,0],[0,0,0],[0,4,4,2,1,0,0,0]] group = ["A", "B", "C", "D"] df = pd.DataFrame([group, score]).T df.columns = ['Group', 'Score']
高效解决方案
直接使用Python列表推导式生成新列,这是处理此类场景性能最优的方案之一,远快于iterrows()/apply()(尤其是大规模数据下):
# 生成零值总数列 df['Zero_Count'] = [lst.count(0) for lst in df['Score']] # 生成最后一个元素列 df['Last_Element'] = [lst[-1] for lst in df['Score']]
兼容空列表的版本
如果Score列存在空列表,可添加异常处理避免报错:
df['Zero_Count'] = [lst.count(0) if lst else 0 for lst in df['Score']] df['Last_Element'] = [lst[-1] if lst else None for lst in df['Score']]
性能说明
列表推导式是Python原生的批量操作,相比逐行循环遍历,在200万行数据下可将处理时间从分钟级压缩至秒级。若追求极致性能,可结合numba库对列表推导逻辑进行JIT编译,但对于绝大多数业务场景,上述方案已足够高效。
内容的提问来源于stack exchange,提问作者le_camerone
相关产品推荐
相关产品推荐

