我是Python和Pandas的新手,所以这可能是一个显而易见的问题。
我有一个列出年龄的数据框。我想创建一个带有年龄限制的新字段。我可以使用lambda语句捕获单个if / else语句,但是我想使用多个if的eg if age < 18 then 'under 18' elif age < 40 then 'under 40' else '>40'。
if age < 18 then 'under 18' elif age < 40 then 'under 40' else '>40'
我认为我无法使用lambda做到这一点,但不确定如何以其他方式做到这一点。到目前为止,我有以下代码:
import pandas as pd import numpy as n d = {'Age' : pd.Series([36., 42., 6., 66., 38.]) } df = pd.DataFrame(d) df['Age_Group'] = df['Age'].map(lambda x: '<18' if x < 19 else '>18') print(df)
pandas DataFrame提供了很好的查询功能。
您可以尝试通过以下简单方法完成操作:
# Set a default value df['Age_Group'] = '<40' # Set Age_Group value for all row indexes which Age are greater than 40 df['Age_Group'][df['Age'] > 40] = '>40' # Set Age_Group value for all row indexes which Age are greater than 18 and < 40 df['Age_Group'][(df['Age'] > 18) & (df['Age'] < 40)] = '>18' # Set Age_Group value for all row indexes which Age are less than 18 df['Age_Group'][df['Age'] < 18] = '<18'
这里的查询是数据框的强大工具,可让您根据需要操纵数据框。
对于更复杂的条件,您可以通过将每个条件封装在括号中并用布尔运算符(例如“&”或“ |”)将其指定来指定多个条件
您可以在这里的第二条设置> 18的条件语句中看到这一点。
编辑:
您可以阅读有关DataFrame和条件索引的更多信息:
http://pandas.pydata.org/pandas-docs/dev/indexing.html#index- objects
要查看其工作原理:
>>> d = {'Age' : pd.Series([36., 42., 6., 66., 38.]) } >>> df = pd.DataFrame(d) >>> df Age 0 36 1 42 2 6 3 66 4 38 >>> df['Age_Group'] = '<40' >>> df['Age_Group'][df['Age'] > 40] = '>40' >>> df['Age_Group'][(df['Age'] > 18) & (df['Age'] < 40)] = '>18' >>> df['Age_Group'][df['Age'] < 18] = '<18' >>> df Age Age_Group 0 36 >18 1 42 >40 2 6 <18 3 66 >40 4 38 >18
看看如何在没有链接的情况下做到这一点[使用EdChums方法]。
>>> df['Age_Group'] = '<40' >>> df.loc[df['Age'] < 40,'Age_Group'] = '<40' >>> df.loc[(df['Age'] > 18) & (df['Age'] < 40), 'Age_Group'] = '>18' >>> df.loc[df['Age'] < 18,'Age_Group'] = '<18' >>> df Age Age_Group 0 36 >18 1 42 <40 2 6 <18 3 66 <40 4 38 >18