如何在同一行中生成多个if语句?python

2024-09-30 14:33:01 发布

您现在位置:Python中文网/ 问答频道 /正文

在熊猫的以下数据框中,有一列名为“grupo_edad”,该列的值为:

De 0 a 4 años, De 5 a 9 años, De 10 a 14 años, De 15 a 19 años, De 20 a 24 años,...,De 85 a 89 años, 90 y más años.

我想创建一个带有条件的新列,其中两个值:“de0a4años”和“de5a9años”采用相同的值,例如:0-9。其他的也一样

尝试在同一代码行中生成if语句时会出现问题。我已经这样做了:

df['nueva_columna']=df['grupo_edad'].apply(lambda x: 
                                 "0-9" if (x=="De 0 a 4 años" or x=="De 5 a 9 años") else 
                                 "10-19" if (x=="De 10 a 14 años" or x=="De 15 a 19 años") else
                                 "20-29" if (x=="De 20 a 24 años" or x=="De 25 a 29 años") else
                                 "30-39" if (x=="De 30 a 34 años" or x=="De 35 a 39 años") else                              
                                 "40-49" if (x=="De 40 a 44 años" or x=="De 45 a 49 años") else                              
                                 "50-59" if (x=="De 50 a 54 años" or x=="De 55 a 59 años") else
                                 "60-69" if (x=="De 60 a 64 años" or x=="De 65 a 69 años") else
                                 "70-79" if (x=="De 70 a 74 años" or x=="De 75 a 79 años") else "80+")

但是它没有正常工作(see image),它们都在工作,但在“10-19”、“70-79”和“80+”方面存在问题。所以我如何错误地理解if语句?很奇怪,有些很好用

提前感谢您的帮助


Tags: or数据代码dfifosde语句
1条回答
网友
1楼 · 发布于 2024-09-30 14:33:01

您应该检查前导/尾随空格。修复代码的一个简单方法是str.strip()

df['nueva_columna']=df['grupo_edad'].str.strip().apply(lambda x: 
                                 "0-9" if (x=="De 0 a 4 años" or x=="De 5 a 9 años") else 
                                 "10-19" if (x=="De 10 a 14 años" or x=="De 15 a 19 años") else
                                 "20-29" if (x=="De 20 a 24 años" or x=="De 25 a 29 años") else
                                 "30-39" if (x=="De 30 a 34 años" or x=="De 35 a 39 años") else                              
                                 "40-49" if (x=="De 40 a 44 años" or x=="De 45 a 49 años") else                              
                                 "50-59" if (x=="De 50 a 54 años" or x=="De 55 a 59 años") else
                                 "60-69" if (x=="De 60 a 64 años" or x=="De 65 a 69 años") else
                                 "70-79" if (x=="De 70 a 74 años" or x=="De 75 a 79 años") else "80+")

但是,使用pd.cut可以使代码更易于阅读:

start_age = df['grupo_edad'].str.extract('De (\d+)', expand=0).astype(int)
df['nueva_columna'] = pd.cut(start_age, bins=range(0,80,10), 
                             right=False,
                             labels=["0-9","10-19","20-29","30-39",
                                     "40-49", "50-59", "60-69", "70-79"]
                            ).fillna('80+')

相关问题 更多 >