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

如何基于两个DataFrame的条件及t-1值创建新DataFrame

解决方案

你可以通过Pandas的布尔掩码和移位操作实现需求,以下是完整代码:

import pandas as pd

# 定义原始DataFrame
P = pd.DataFrame({'col1': [26.7,24.7,26.1,26.4,24.5], 
                  'col2': [30.8,30.8,30.7,30.8,29.8], 
                  'col3': [30.8,30.7,30.5,30.6,30.0]})
PR = pd.DataFrame({'col1': [79.8,73.6,81.1,79.4,75.7], 
                   'col2': [74.1,74.1,77.0,74.7,74.1], 
                   'col3': [74.0,74.0,76.4,74.3,74.8]})

# 生成条件掩码
p_mask = P >= 30.6
pr_mask = PR < PR.shift(1)

# 合并条件并转换为0/1整数
result = (p_mask & pr_mask).astype(int)

print(result)

逻辑拆解

  1. P的条件判断:P >= 30.6会生成一个布尔DataFrame,满足条件的位置为True,否则为False
  2. PR的时序对比:PR.shift(1)将每列的元素向下移动一位(第一行变为NaN),PR < PR.shift(1)就能判断当前值是否小于前一时刻的值。由于NaN参与比较的结果为False,第一行自然全部为0,符合需求
  3. 合并条件并转换:用&对两个布尔DataFrame做逐元素逻辑与,再通过astype(int)把True转为1、False转为0,得到最终结果

运行代码后输出的result与你期望的结果完全一致:

col1  col2  col3
0     0     0     0
1     0     1     1
2     0     0     0
3     0     1     0
4     0     0     0

内容的提问来源于stack exchange,提问作者Pedro de Sá

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:01:31