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

如何在Python中基于两个DataFrame实现条件计算

解决两个DataFrame的条件计算问题

首先先创建你描述的两个DataFrame:

import pandas as pd
import numpy as np

# 初始化df1
df1 = pd.DataFrame({
    'YN': ['Y', 'N'],
    'Cost': [100, 50]
})

# 初始化df2
df2 = pd.DataFrame({
    'Category': ['A', 'B'],
    'Factor': [0.10, 0.20]
})

步骤1:提取df2中的对应因子

先把df2里Category为A和B的Factor提取出来,方便后续调用:

# 提取Category=A的因子
factor_a = df2.loc[df2['Category'] == 'A', 'Factor'].iloc[0]
# 提取Category=B的因子
factor_b = df2.loc[df2['Category'] == 'B', 'Factor'].iloc[0]

用iloc[0]比直接取数组值更稳妥,避免索引相关的小问题。

方法1:用np.where实现条件判断(最推荐,简洁高效)

这是处理简单条件逻辑最常用的方法,一行代码搞定:

df1['Price'] = np.where(df1['YN'] == 'Y', df1['Cost'] * factor_a, df1['Cost'] * factor_b)

逻辑:如果YN等于Y,就用Cost乘factor_a;否则乘factor_b。

方法2:字典映射+列运算(可读性强)

先把YN值和对应的因子做成字典,再映射后计算:

# 建立YN到因子的映射字典
factor_dict = {'Y': factor_a, 'N': factor_b}
# 先映射得到每行对应的因子,再和Cost相乘
df1['Price'] = df1['YN'].map(factor_dict) * df1['Cost']

方法3:apply逐行处理(适合复杂逻辑,效率稍低)

如果后续逻辑变复杂,可自定义函数逐行计算:

def compute_price(row):
    if row['YN'] == 'Y':
        return row['Cost'] * factor_a
    else:
        return row['Cost'] * factor_b

# axis=1表示按行应用函数
df1['Price'] = df1.apply(compute_price, axis=1)

验证结果

运行任意一种方法后,打印df1会得到:

YN  Cost  Price
0  Y   100   10.0
1  N    50   10.0

扩展提示

如果你的数据里YN有其他取值,或者df2的Category可能缺失,可以用fillna设置默认值,比如:

# 方法2中添加默认因子(比如0.05)
df1['Price'] = df1['YN'].map(factor_dict).fillna(0.05) * df1['Cost']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 03:05:23