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

如何用逻辑或合并两个带日期索引的Pandas DataFrame?

Pandas合并DataFrame并对共同列取逻辑或

当然有办法实现这个需求!针对你给出的场景,这里有两种简洁的解决方案:

方法1:使用combine方法(索引完全匹配时推荐)

combine方法可以让我们对两个DataFrame的对应元素应用自定义逻辑,同时通过fill_value处理缺失的列/行。对于你的需求,我们直接用逻辑或操作(|),缺失的位置填充False即可:

import pandas as pd

# 构造示例数据(和你的输入一致)
A = pd.DataFrame(
    {'a': [True, False, False],
     'b': [False, True, False],
     'c': [False, False, True]},
    index=pd.to_datetime(['2018-02-19', '2018-02-20', '2018-02-21'])
)

B = pd.DataFrame(
    {'a': [False, False, True],
     'b': [True, False, True],
     'd': [True, False, True]},
    index=pd.to_datetime(['2018-02-19', '2018-02-20', '2018-02-21'])
)

# 核心代码
C = A.combine(B, lambda x, y: x | y, fill_value=False)

运行后得到的C就是你想要的结果:

>>> C
               a      b      c      d
Timestamp                            
2018-02-19  True   True  False   True
2018-02-20  False  True  False  False
2018-02-21  True   True   True   True

原理:

  • 对于两个DataFrame都有的列(a、b),对应元素直接做逻辑或运算;
  • 对于A独有的列(c),B中没有对应数据,用fill_value=False填充,结果就是A原有的值(x | False = x);
  • 对于B独有的列(d),A中没有对应数据,用fill_value=False填充,结果就是B原有的值(False | y = y)。

方法2:使用concat + groupby(索引不完全匹配时适用)

如果你的两个DataFrame索引可能存在不一致的情况,这个方法更通用:先按列拼接两个DataFrame,填充缺失值为False,再按列名分组,对每组取any()(逻辑或的等价操作,只要组内有一个True结果就是True):

C = pd.concat([A, B], axis=1).fillna(False).groupby(level=0, axis=1).any()

原理:

  • pd.concat([A, B], axis=1)会把两个DataFrame按列拼接,自动对齐索引,共同列会出现两次;
  • fillna(False)把拼接后产生的缺失值转为False,避免布尔运算出错;
  • groupby(level=0, axis=1)按原始列名分组(拼接后共同列的列名重复,level=0对应原始列名);
  • any()方法对每组内的元素取逻辑或,独有的列只有一组元素,直接保留原数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:36:05