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

Pandas如何根据多条件筛选行并创建新列存储指定值

多条件筛选DataFrame并创建新列的正确实现方案

需求说明

基于现有DataFrame创建新列new_column:当Age为19或21,且Stream为Math或Commerce时,取值为对应行的hours;其余情况取值为0。

示例数据

import pandas as pd

record = {
  'Name': ['Ankit', 'Amit', 'Aishwarya', 'Priyanka', 'Priya', 'Shaurya' ],
  'Age': [21, 19, 20, 18, 17, 21],
  'Stream': ['Math', 'Commerce', 'Science', 'Math', 'Math', 'Science'],
  'Percentage': [88, 92, 95, 70, 65, 78],
  'hours': [1,2,3,4,5,6]
}
df = pd.DataFrame(record)

尝试过的错误代码

代码1(合并方式)

options1 = ['Math', 'Commerce']
options2 = [21,19]
    
dataframe1 = df[(df['Stream'].isin(options1)) & (df['Age'].isin(options2))]
dataframe1['new_column'] = dataframe1['hours']
    
df = pd.merge(df, dataframe1, on='Name', how='left')

问题:合并后会生成重复列(如Age_x、Age_y),未匹配行的new_column为NaN而非0,需额外处理空值,步骤冗余。

代码2(apply方式)

df['New'] = df['hours']
df_bkp.loc[:,['New']] = df_bkp[['Stream','Age','New']].apply(lambda x: 0 if (x.Stream in ['Math','Commerce'] & (x.Age in [19,21])) else df_bkp['New'], axis=1 )

问题:语法错误(&是位运算符,此处应使用and),且apply遍历行效率低下,引用df_bkp['New']会返回整列而非当前行值,逻辑错误。

期望输出

Name      Age Stream  Percentage  hours  new_column
Ankit     21  Math          88      1           1
Amit      19  Commerce      92      2           2
Aishwarya 20  Science       95      3           0
Priyanka  18  Math          70      4           0
Priya     17  Math          65      5           0
Shaurya   21  Science       78      6           0

正确简化实现方案

推荐使用矢量化操作,比apply效率更高,代码简洁易读:

方法1:numpy.where(最直观)

import numpy as np

condition = (df['Age'].isin([19, 21])) & (df['Stream'].isin(['Math', 'Commerce']))
df['new_column'] = np.where(condition, df['hours'], 0)

方法2:pd.Series.where

condition = (df['Age'].isin([19, 21])) & (df['Stream'].isin(['Math', 'Commerce']))
df['new_column'] = df['hours'].where(condition, 0)

方法3:布尔索引赋值

df['new_column'] = 0  # 先默认设为0
condition = (df['Age'].isin([19, 21])) & (df['Stream'].isin(['Math', 'Commerce']))
df.loc[condition, 'new_column'] = df.loc[condition, 'hours']

以上三种方法均可高效实现需求,无逻辑或语法问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 22:10:22