PySpark SQL提取指定DataFrame行:用Lambda循环还是内置方法?
提取指定行的Pandas高效解决方案
嘿,完全不用在Lambda里写循环!Pandas本身就有非常顺手的内置方法来搞定这个需求,效率还比循环高得多,给你两种最实用的方案:
1. 按固定行位置提取(适合已知行号的场景)
注意Pandas默认用0-based索引(也就是第一行对应索引0),如果你说的第1、2、4、6、8、9行是日常说的1-based行号,转成0-based就是0,1,3,5,7,8,直接用iloc方法提取就行:
# 提取目标行 selected_rows = df.iloc[[0, 1, 3, 5, 7, 8]]
这个方法直接定位目标行,没有多余计算,速度拉满。
2. 按内容标识筛选提取(适合业务逻辑驱动的场景)
你提到这些行是“基于STARTED - ARRIVED的行”,如果这些行有统一的状态标识(比如某列的值是STARTED或ARRIVED),用布尔索引会更灵活——就算后续行位置变化,只要标识不变就能正确提取:
# 假设状态列名为status,替换成你实际的列名即可 selected_rows = df[df['status'].isin(['STARTED', 'ARRIVED'])]
这种方式更贴合业务逻辑,维护起来也更省心。
为啥不推荐Lambda循环?
Pandas的内置方法都是向量化操作,底层用C实现,比Python层面的循环(包括Lambda里的循环)效率高几个量级,数据量越大差距越明显,能不用循环就别用~
内容的提问来源于stack exchange,提问作者syv
相关产品推荐
相关产品推荐

