如何基于两个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)
逻辑拆解
- P的条件判断:
P >= 30.6会生成一个布尔DataFrame,满足条件的位置为True,否则为False - PR的时序对比:
PR.shift(1)将每列的元素向下移动一位(第一行变为NaN),PR < PR.shift(1)就能判断当前值是否小于前一时刻的值。由于NaN参与比较的结果为False,第一行自然全部为0,符合需求 - 合并条件并转换:用
&对两个布尔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á
相关产品推荐
相关产品推荐

