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

如何高效沿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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 21:15:35