pandas DataFrame两列按指定交替顺序合并的最优实现方法
最快实现方案
针对10万行以上的大数据量场景,最优方案是直接调用numpy的向量化展平操作,全程无循环,仅需一行代码即可完成,性能比循环类实现高2个数量级以上。
核心思路
pandas底层基于numpy数组存储数据,将需要交替合并的两列拼接为二维数组后,按**列优先顺序(Fortran顺序)**展平,天然就能得到逐行交错排列的结果,该操作是内存层面的批量处理,几乎没有额外开销。
实现代码
import pandas as pd import numpy as np # 测试用例,构造10万行的示例DataFrame df = pd.DataFrame({ "Zeroes": np.zeros(100000, dtype=int), "Ones": np.ones(100000, dtype=int) }) # 核心实现:选需要交替的列,转numpy数组后按列优先展平 interleaved_result = df[["Zeroes", "Ones"]].values.ravel(order="F")
效果验证
对于3行的示例输入:
| Zeroes | Ones |
|---|---|
| 0 | 1 |
| 0 | 1 |
| 0 | 1 |
上述代码输出结果为 [0 1 0 1 0 1],完全符合需求。
扩展说明
- 如果需要输出为pandas Series格式,直接用
pd.Series(interleaved_result)转换即可 - 该方案支持多列交替合并:只需要将需要交替的列按顺序传入列表即可,比如3列交替就传入
[col1, col2, col3],展平后会自动按col1[0], col2[0], col3[0], col1[1], col2[1], col3[1]的顺序排列 - 如果两列长度不一致,会自动按短列长度截断,多余元素丢弃;如果需要保留所有元素,可以先对短列补空值后再执行操作,最后过滤空值即可
内容的提问来源于stack exchange,提问作者codearts
相关产品推荐
相关产品推荐

