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

基于条件语句的多DataFrame除法运算实现需求

条件除法运算实现方案

已知数据

三个DataFrame的结构与数据如下(已将date设为索引):

import pandas as pd

df1 = pd.DataFrame({
    'date': ['2022-08-17 00:00:00', '2022-08-17 01:00:00', '2022-08-17 02:00:00', '2022-08-17 03:00:00'],
    'col1': [50, 100, 180, -80],
    'col2': [30, -20, 10, -66],
    'col3': [-40, 70, -80, 20]
}).set_index('date')

df2 = pd.DataFrame({
    'date': ['2022-08-17 00:00:00', '2022-08-17 01:00:00', '2022-08-17 02:00:00', '2022-08-17 03:00:00'],
    'col1': [50, 10, 70, 20],
    'col2': [33, 87, 90, 12],
    'col3': [90, 40, 30, 10]
}).set_index('date')

df3 = pd.DataFrame({
    'date': ['2022-08-17 00:00:00', '2022-08-17 01:00:00', '2022-08-17 02:00:00', '2022-08-17 03:00:00'],
    'col1': [-50, -120, -160, -40],
    'col2': [-15, -20, -5, -60],
    'col3': [-40, -70, -80, -20]
}).set_index('date')

运算规则

针对df1的每个元素,执行以下条件除法:

  • 若元素大于0:结果为 df1元素 / df2对应位置元素
  • 若元素小于0:结果为 (-1 * df1元素) / df3对应位置元素

实现代码

使用numpy.where实现元素级的条件判断与运算,代码简洁高效:

import numpy as np

# 提取数值列(避免索引参与运算)
numeric_cols = df1.columns

# 执行条件运算并生成结果DataFrame
result_df = pd.DataFrame(
    np.where(df1[numeric_cols] > 0,
             df1[numeric_cols] / df2[numeric_cols],
             (-df1[numeric_cols]) / df3[numeric_cols]),
    index=df1.index,
    columns=numeric_cols
)

最终结果

运行代码后得到的结果如下:

col1      col2      col3
date                                         
2022-08-17 00:00:00   1.0  0.909091  -1.00000
2022-08-17 01:00:00  10.0 -1.000000   1.75000
2022-08-17 02:00:00   2.571429  0.111111  -1.00000
2022-08-17 03:00:00   2.0 -1.100000   2.00000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 12:36:17