Python中轴相同的两个Pandas DataFrame能否将对应元素合并为元组?
对应位置元素合并为元组的Pandas实现方案
有两种常用实现方式,可根据后续使用场景选择:
方案1:直接合并为元组,完全保留原有行列结构
直接使用DataFrame.combine方法即可实现需求,该方法会逐列对齐两个DataFrame的索引,将对应位置的元素拼接为元组,不会修改原有行、列的位置和标签。
示例代码:
import pandas as pd # 构造两个轴完全一致的测试DataFrame df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}, index=['x', 'y', 'z']) df2 = pd.DataFrame({'A': [10, 20, 30], 'B': [40, 50, 60]}, index=['x', 'y', 'z']) # 对应位置合并为元组 merged_df = df1.combine(df2, lambda col1, col2: tuple(zip(col1, col2)))
如果处理的数据量较大,可使用向量化写法提升性能:
merged_df = pd.DataFrame( [tuple(zip(row1, row2)) for row1, row2 in zip(df1.to_numpy(), df2.to_numpy())], index=df1.index, columns=df1.columns )
方案2:多级列索引合并(更优通用方案)
如果不需要强制将元素存为元组,更推荐使用多级列索引的合并方案,该方案不会修改单元格的原始数据类型,后续取数、计算的性能远高于元组格式,同时完全保留原有索引、不丢失数据信息。
示例代码:
# 沿列方向拼接,用keys标记数据来源 merged_multi = pd.concat([df1, df2], axis=1, keys=['数据源1', '数据源2'])
使用时可按层级取数:
# 取第一个数据源的A列 merged_multi['数据源1']['A'] # 取x行两个数据源的B列数值 merged_multi.loc['x', (slice(None), 'B')]
内容的提问来源于stack exchange,提问作者aQuestionableQuestion
相关产品推荐
相关产品推荐

