Python dataframe基于多个if语句添加字段

Python dataframe基于多个if语句添加字段,python,lambda,Python,Lambda,我对Python和Pandas很陌生,所以这可能是一个显而易见的问题 我有一个数据框,里面列出了年龄。我想创建一个带有年龄段的新字段。我可以使用lambda语句捕获单个if/else语句,但我想使用多个if,例如如果年龄18)和(df['Age']>df['Age_Group'][(df['Age']>18)和(df['Age']>>df['Age_Group'][df['Age']>>df.loc[df['Age']40'这是真的。如果要更新的条件和列被切换,它不会更新数据帧,而是一个副本,该

我对Python和Pandas很陌生,所以这可能是一个显而易见的问题

我有一个数据框,里面列出了年龄。我想创建一个带有年龄段的新字段。我可以使用lambda语句捕获单个if/else语句,但我想使用多个if,例如
如果年龄<18那么“18岁以下”elif年龄<40那么“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)
将熊猫作为pd导入
将numpy作为n导入
d={'Age':pd.系列([36,42,6,66,38.])
df=pd.数据帧(d)
df['Age_Group']=df['Age'].map(λx:'18')
打印(df)

熊猫数据框提供了良好的查询能力

您想做的事情可以简单地通过以下方式完成:

# 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'
#设置默认值
df[“年龄组”]=“40”
#为年龄大于18且小于40的所有行索引设置年龄组值
df['Age_Group'][(df['Age']>18)和(df['Age']<40)]='>18'
#为年龄小于18岁的所有行索引设置年龄组值
df['Age_Group'][df['Age']<18]='40'
>>>df['Age_Group'][(df['Age']>18)和(df['Age']<40)]='>18'
>>>df['Age_Group'][df['Age']<18]='18'

>>>df.loc[df['Age']<18,'Age_Group']='你也可以做一个嵌套的np.where()


df['Age\u group']=np.where(df.Age你不应该使用链式赋值:你应该做
df.loc[df['Age']>40,'Age\u group']='>40'
这是真的。如果要更新的条件和列被切换,它不会更新数据帧,而是一个副本,该副本将被删除,因为它永远不会设置回原始数据帧。但是,只要要更新的列在第一位,那么它将具有使用.loc的相同效果。然而,我的方法更容易出错对于刚接触pandas的人来说,这是一个不错的选择。谢谢-我两种方法都可以使用,但我会使用未加限制的方法,因为我从评论中得出结论,这是2种方法中更安全的一种。处理一个代码库时,它充分利用了这种嵌套功能,在这一点上非常不可读。因此,在使用这种方法时,请注意一点.通常使用
np.where
有什么好处?在看到Ryan的解决方案后,我想知道什么时候使用np.where
>>> 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
>>> 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
df['Age_group'] = np.where(df.Age<18, 'under 18',
                           np.where(df.Age<40,'under 40', '>40'))