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

如何在Pandas中通过多条件判断生成新列Col C?

问题描述

现有如下Pandas DataFrame:

|  Col A   |    Col B
-----------------------
| NaN      |    3144
| NaN      |    3145
| 123      |    3246
| NaN      |    NaN

需新增一列Col C,遵循以下逻辑:

  • 当Col A为null且Col B非null时,Col C取值为"A"
  • 当Col A和Col B均非null,或两者均为null时,Col C取值为"B"

期望输出结果:

|  Col A   |    Col B    |    Col C
-------------------------------------
| NaN      |    3144     |    A
| NaN      |    3145     |    A
| 123      |    3246     |    B
| NaN      |    NaN      |    B

解决方案

方法1:使用numpy.where(直观易懂,适合新手)

这是最直接的实现方式,通过布尔条件判断分支:

import pandas as pd
import numpy as np

# 构造示例DataFrame
df = pd.DataFrame({
    'Col A': [np.nan, np.nan, 123, np.nan],
    'Col B': [3144, 3145, 3246, np.nan]
})

# 定义触发"A"的条件:Col A为空 且 Col B不为空
condition = df['Col A'].isna() & ~df['Col B'].isna()

# 按条件赋值:满足条件设为"A",其余设为"B"
df['Col C'] = np.where(condition, 'A', 'B')

方法2:布尔索引直接赋值(无需额外导入numpy)

先给所有行默认赋值"B",再修改满足条件的行,逻辑清晰:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'Col A': [np.nan, np.nan, 123, np.nan],
    'Col B': [3144, 3145, 3246, np.nan]
})

# 先给Col C统一赋值"B"
df['Col C'] = 'B'
# 筛选出符合条件的行,将Col C改为"A"
df.loc[df['Col A'].isna() & ~df['Col B'].isna(), 'Col C'] = 'A'

方法3:使用apply(适合更复杂的自定义逻辑)

如果后续逻辑需要扩展,可使用apply逐行处理,但大数据量下效率略低于前两种方法:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'Col A': [np.nan, np.nan, 123, np.nan],
    'Col B': [3144, 3145, 3246, np.nan]
})

def get_col_c(row):
    # 判断符合"A"的条件
    if pd.isna(row['Col A']) and not pd.isna(row['Col B']):
        return 'A'
    # 其余情况返回"B"
    else:
        return 'B'

# 逐行应用函数生成Col C
df['Col C'] = df.apply(get_col_c, axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 20:03:17