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

如何简单实现pandas多DataFrame按指定规则合并转换?

多pandas DataFrame按规则合并实现方案

核心实现逻辑:

  • 先取三个DataFrame索引的交集,得到三个表共有的时间戳索引
  • 再取三个DataFrame列名的交集,保证列维度对齐
  • 将三个表按共有索引、共有列做切片对齐,保证行列位置一一对应
  • 逐单元格判断,仅当三个表对应位置值均为1时填充1,其余位置填充NaN

可直接运行的实现代码

import pandas as pd
import numpy as np

# 输入示例数据
df1 = pd.DataFrame({'C1': [None, 1, None], 'C2': [1, None, 1]}, index=[0, 1, 4])
df2 = pd.DataFrame({'C1': [None, 1,1, None], 'C2': [1, None, 1,1]}, index=[0, 1,2, 4])
df3 = pd.DataFrame({'C1': [1,1, None,1], 'C2': [None, None, 1,None]}, index=[1, 2,3, 4])

# 取三个表共有的索引、共有的列
common_index = df1.index.intersection(df2.index).intersection(df3.index)
common_cols = df1.columns.intersection(df2.columns).intersection(df3.columns)

# 将三个表对齐到相同的行列结构
df1_a, df2_a, df3_a = [df.loc[common_index, common_cols] for df in [df1, df2, df3]]

# 按规则生成合并结果
result = pd.DataFrame(
    np.where(
        (df1_a == 1) & (df2_a == 1) & (df3_a == 1),
        1,
        np.nan
    ),
    index=common_index,
    columns=common_cols
)

效果说明

上述代码运行后完全匹配需求:

  • 仅保留三个表共有的索引[1,4]
  • 索引1的C1列三个表值均为1,因此填充1,其余位置均不满足“三个值全为1”的条件,填充NaN

预期效果参考:
合并预期效果

该实现无需多次调用merge做表连接,通过索引切片对齐+向量化位运算实现,代码简洁且执行效率高,也可适配更多同结构DataFrame的扩展合并场景。

内容的提问来源于stack exchange,提问作者saman taheri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:27:19