【发布时间】:2015-01-09 06:52:18
【问题描述】:
我想将我的自定义函数(它使用 if-else 阶梯)应用于这六列(ERI_Hispanic、ERI_AmerInd_AKNatv、ERI_Asian、ERI_Black_Afr.Amer、ERI_HI_PacIsl、ERI_White)我的数据框的行。
我尝试了与其他问题不同的方法,但似乎仍然无法为我的问题找到正确的答案。这其中的关键部分是,如果这个人被算作西班牙裔,他们就不能算作其他任何人。即使他们在另一个种族列中有“1”,他们仍然被视为西班牙裔,而不是两个或更多种族。同样,如果所有 ERI 列的总和大于 1,则它们被计为两个或多个种族,不能算作一个独特的种族(西班牙裔除外)。希望这是有道理的。任何帮助将不胜感激。
这几乎就像对每一行进行 for 循环,如果每条记录满足一个标准,它们就会被添加到一个列表中并从原始列表中删除。
从下面的数据框中,我需要根据 SQL 中的以下规范计算一个新列:
==========================标准===================== ==========
IF [ERI_Hispanic] = 1 THEN RETURN “Hispanic”
ELSE IF SUM([ERI_AmerInd_AKNatv] + [ERI_Asian] + [ERI_Black_Afr.Amer] + [ERI_HI_PacIsl] + [ERI_White]) > 1 THEN RETURN “Two or More”
ELSE IF [ERI_AmerInd_AKNatv] = 1 THEN RETURN “A/I AK Native”
ELSE IF [ERI_Asian] = 1 THEN RETURN “Asian”
ELSE IF [ERI_Black_Afr.Amer] = 1 THEN RETURN “Black/AA”
ELSE IF [ERI_HI_PacIsl] = 1 THEN RETURN “Haw/Pac Isl.”
ELSE IF [ERI_White] = 1 THEN RETURN “White”
评论:如果西班牙裔的 ERI 标志为真 (1),则员工被归类为“西班牙裔”
注释:如果超过 1 个非西班牙裔 ERI 标志为真,则返回“两个或更多”
====================== DATAFRAME ======================== ===
lname fname rno_cd eri_afr_amer eri_asian eri_hawaiian eri_hispanic eri_nat_amer eri_white rno_defined
0 MOST JEFF E 0 0 0 0 0 1 White
1 CRUISE TOM E 0 0 0 1 0 0 White
2 DEPP JOHNNY 0 0 0 0 0 1 Unknown
3 DICAP LEO 0 0 0 0 0 1 Unknown
4 BRANDO MARLON E 0 0 0 0 0 0 White
5 HANKS TOM 0 0 0 0 0 1 Unknown
6 DENIRO ROBERT E 0 1 0 0 0 1 White
7 PACINO AL E 0 0 0 0 0 1 White
8 WILLIAMS ROBIN E 0 0 1 0 0 0 White
9 EASTWOOD CLINT E 0 0 0 0 0 1 White
【问题讨论】:
-
您的特定函数只是一个长 if-else 阶梯,其中某些变量的值优先于其他变量。在硬件工程术语中,它被称为 priority-decoder。