如何根据Spawners与Recruits列的数值条件创建Class分类列?
生成Class列的解决方案
根据你给出的规则,下面提供几种常用工具的实现方法:
Excel 解法
直接在Class列的第一个单元格(比如C2)输入嵌套IF公式,下拉填充即可:
=IF(AND(A2<>0,B2<>0),"Both",IF(A2<>0,"Spawners","Recruits"))
逻辑说明:
- 先判断Spawners和Recruits是否都不为0,是则返回
Both - 否则判断Spawners是否非零,是则返回
Spawners - 剩下的情况就是Recruits非零,返回
Recruits
Python Pandas 解法
高效向量式写法(推荐)
import pandas as pd import numpy as np # 假设你的数据存储在DataFrame中 df = pd.DataFrame({ 'Spawners': [85.640176, 0, 275.391055], 'Recruits': [0, 38.30213, 22.031284] }) # 生成Class列 df['Class'] = np.where( (df['Spawners'] != 0) & (df['Recruits'] != 0), 'Both', np.where(df['Spawners'] != 0, 'Spawners', 'Recruits') ) print(df)
逐行判断写法(适合新手理解)
import pandas as pd df = pd.DataFrame({ 'Spawners': [85.640176, 0, 275.391055], 'Recruits': [0, 38.30213, 22.031284] }) def get_class(row): if row['Spawners'] != 0 and row['Recruits'] != 0: return 'Both' elif row['Spawners'] != 0: return 'Spawners' else: return 'Recruits' df['Class'] = df.apply(get_class, axis=1)
R 解法
使用dplyr包的case_when函数实现:
library(dplyr) # 构造示例数据 df <- data.frame( Spawners = c(85.640176, 0, 275.391055), Recruits = c(0, 38.30213, 22.031284) ) # 生成Class列 df <- df %>% mutate(Class = case_when( Spawners != 0 & Recruits != 0 ~ "Both", Spawners != 0 ~ "Spawners", TRUE ~ "Recruits" )) print(df)
内容的提问来源于stack exchange,提问作者Syssy
相关产品推荐
相关产品推荐

