我对Python和Pandas很陌生,所以这可能是一个显而易见的问题.
我有一个列有年龄的数据框.我想创建一个带有年龄段的新领域.我可以使用lambda语句捕获单个if/else语句,但我想使用多个if,例如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)
Run Code Online (Sandbox Code Playgroud)
Rya*_*n G 56
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'
Run Code Online (Sandbox Code Playgroud)
这里的查询是数据框的强大工具,允许您根据需要操作DataFrame.
对于更复杂的条件,您可以通过将每个条件封装在括号中并使用布尔运算符(例如'&'或'|')分隔它们来指定多个条件.
你可以在这里看到这个用于设置> 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
Run Code Online (Sandbox Code Playgroud)
编辑:
要查看如何在没有链接的情况下执行此操作[使用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
Run Code Online (Sandbox Code Playgroud)
小智 12
你也可以做一个嵌套的np.where()
df['Age_group'] = np.where(df.Age<18, 'under 18',
np.where(df.Age<40,'under 40', '>40'))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
69617 次 |
| 最近记录: |