如何高效沿axis=2合并两个Pandas DataFrame,使单元格值为元组?
解决方案
针对百万级行的大型DataFrame,推荐两种高效实现方式:
方法一:利用np.stack + 逐列转换为元组数组
你已经通过np.stack得到了正确的三维数组,只需对每一列做转换,把每个二维元素转成元组,再构建DataFrame即可:
import pandas as pd import numpy as np df1 = pd.DataFrame({ 'A':[True, True, False], 'B':[False, True, False], }) df2 = pd.DataFrame({ 'A':[1, 2, 3], 'B':[5, 6, 7], }) # 生成三维数组 stacked = np.stack([df1.values, df2.values], axis=2) # 逐列转换为元组数组,再构建DataFrame result = pd.DataFrame({col: stacked[:, i, :].tolist() for i, col in enumerate(df1.columns)}, index=df1.index)
这种方法依托numpy的向量化操作,完全避免逐行循环,效率远高于单元格级遍历,适配百万级数据规模。
方法二:字典推导式生成元组列表(次高效,仅作参考)
如果数据量相对较小,也可以用字典推导式逐列生成元组列表,但百万级行场景下,效率不如方法一:
result = pd.DataFrame({col: list(zip(df1[col], df2[col])) for col in df1.columns}, index=df1.index)
为什么直接转stacked为DataFrame不行?
np.stack生成的是三维数组,而Pandas DataFrame默认仅接受二维结构(每行对应一维数据),直接转换会让每个单元格变成数组而非元组,所以必须先把三维数组的最后一维转换为元组,再构建DataFrame。
内容的提问来源于stack exchange,提问作者MYK
相关产品推荐
相关产品推荐

