小编典典

Pandas数据框基于多个if语句添加字段

python

我是Python和Pandas的新手,所以这可能是一个显而易见的问题。

我有一个列出年龄的数据框。我想创建一个带有年龄限制的新字段。我可以使用lambda语句捕获单个if / else语句,但是我想使用多个if的eg 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)

阅读 183

收藏
2021-01-20

共1个答案

小编典典

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
2021-01-20