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

如何对比DataFrame两列值并生成Is_dob列?

问题分析与解决方案

你的代码存在几个关键问题导致无法得到预期结果:

  • 嵌套循环逻辑错误:两层循环会遍历所有Age和diff(DOB-today)的组合,每次赋值都会覆盖整个Is_dob列,最终只会保留最后一次循环的结果,完全没有实现逐行对比的逻辑。
  • 列名不匹配:示例数据中对比列是diff(DOB-today),但你的代码里用了df['diff'],会导致无法正确获取目标列的数据。
  • 大小写不一致:示例要求空值时赋值Other,但代码里写的是'other',不符合输出要求。

正确实现方式

推荐使用Pandas的矢量化操作(避免循环,效率更高),以下是两种可行方案:

方案1:使用numpy.where链式判断(推荐)

import numpy as np
import pandas as pd

# 先判断是否存在空值,再对比两列值是否相等
df['Is_dob'] = np.where(
    # 检查Age或diff(DOB-today)是否有缺失值
    df[['Age', 'diff(DOB-today)']].isnull().any(axis=1),
    'Other',
    # 无空值时,判断两值是否相等
    np.where(df['Age'] == df['diff(DOB-today)'], 'Yes', 'No')
)

方案2:使用apply逐行处理(适合逻辑更复杂的场景)

def get_is_dob(row):
    age = row['Age']
    diff_val = row['diff(DOB-today)']
    if pd.isnull(age) or pd.isnull(diff_val):
        return 'Other'
    return 'Yes' if age == diff_val else 'No'

df['Is_dob'] = df.apply(get_is_dob, axis=1)

验证示例数据

假设你的示例DataFrame定义如下:

df = pd.DataFrame({
    'Age': [54, 27, 43, 68, pd.NA],
    'diff(DOB-today)': [54, 27, 44, 70, pd.NA]
})

运行上述代码后,Is_dob列会得到预期结果:['Yes', 'Yes', 'No', 'No', 'Other']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 21:45:38