Ответ 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'
Запрос здесь является мощным инструментом фреймворка данных и позволит вам манипулировать DataFrame по мере необходимости.
Для более сложных условных условий вы можете указать несколько условий, инкапсулируя каждое условие в скобки и разделяя их на логический оператор (например, '&' или '|')
Вы можете увидеть это в работе здесь для второго условного оператора для установки > 18.
Edit:
Подробнее об индексировании DataFrame и условных выражений читайте:
http://pandas.pydata.org/pandas-docs/dev/indexing.html#index-objects
Edit:
Чтобы узнать, как это работает:
>>> 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
Edit:
Чтобы узнать, как это сделать без привязки [с использованием подхода 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