Python-pandas根据其他列的值创建新列/逐行应用多列的功能
我想申请我的自定义函数(它使用的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标志为True(1),则该雇员被分类为“西班牙裔”
注释:如果超过1个非西班牙ERI标志为真,则返回“两个或更多”
======================数据帧===========================
lname fname rno_cd eri_afr_amer eri_asian eri_hawaiian eri_hispanic eri_nat_amer eri_white rno_defined0 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
回答:
好的,执行此步骤有两个步骤-首先是编写一个可以执行所需翻译的函数-我已根据你的伪代码将一个示例放在一起:
def label_race (row): if row['eri_hispanic'] == 1 :
return 'Hispanic'
if row['eri_afr_amer'] + row['eri_asian'] + row['eri_hawaiian'] + row['eri_nat_amer'] + row['eri_white'] > 1 :
return 'Two Or More'
if row['eri_nat_amer'] == 1 :
return 'A/I AK Native'
if row['eri_asian'] == 1:
return 'Asian'
if row['eri_afr_amer'] == 1:
return 'Black/AA'
if row['eri_hawaiian'] == 1:
return 'Haw/Pac Isl.'
if row['eri_white'] == 1:
return 'White'
return 'Other'
你可能想要解决这个问题,但这似乎可以解决问题-请注意,进入函数的参数被认为是一个标有“行”的Series
对象。
接下来,在熊猫中使用apply函数来应用该函数-例如
df.apply (lambda row: label_race(row), axis=1)
请注意axis = 1说明符,这意味着应用程序是在行而不是列级别完成的。结果在这里:
0 White1 Hispanic
2 White
3 White
4 Other
5 White
6 Two Or More
7 White
8 Haw/Pac Isl.
9 White
如果你对这些结果感到满意,请再次运行它,将结果保存到原始数据框中的新列中。
df['race_label'] = df.apply (lambda row: label_race(row), axis=1)
结果数据框如下所示(向右滚动以查看新列):
lname fname rno_cd eri_afr_amer eri_asian eri_hawaiian eri_hispanic eri_nat_amer eri_white rno_defined race_label0 MOST JEFF E 0 0 0 0 0 1 White White
1 CRUISE TOM E 0 0 0 1 0 0 White Hispanic
2 DEPP JOHNNY NaN 0 0 0 0 0 1 Unknown White
3 DICAP LEO NaN 0 0 0 0 0 1 Unknown White
4 BRANDO MARLON E 0 0 0 0 0 0 White Other
5 HANKS TOM NaN 0 0 0 0 0 1 Unknown White
6 DENIRO ROBERT E 0 1 0 0 0 1 White Two Or More
7 PACINO AL E 0 0 0 0 0 1 White White
8 WILLIAMS ROBIN E 0 0 1 0 0 0 White Haw/Pac Isl.
9 EASTWOOD CLINT E 0 0 0 0 0 1 White White
以上是 Python-pandas根据其他列的值创建新列/逐行应用多列的功能 的全部内容, 来源链接: utcz.com/qa/433685.html