Эквивалент в javascript:
var text = `
This
Is
A
Multiline
String
`;
Вот спецификация . См. Поддержку браузера внизу этой страницы . Вот некоторые примеры .
На мой взгляд, вы не должны использовать вложенные if
/ else
предложения для этой задачи.
Решение Pandas
Как предлагает @JonClements, вы также можете использовать pandas.cut
для этого, преимущество в том, что ваш новый столбец становится категориальным .
Вам нужно только определить свои границы (в том числе np.inf
) и имена категорий, затем примените pandas.cut
к нужной числовой колонке.
bins = [0, 2, 18, 35, 65, np.inf]
names = ['<2', '2-18', '18-35', '35-65', '65+']
df['AgeRange'] = pd.cut(df['Age'], bins, labels=names)
print(df.dtypes)
# Age int64
# Age_units object
# AgeRange category
# dtype: object
Решение Numpy
numpy.digitize
предоставляет другое чистое решение. Идея состоит в том, чтобы определить ваши границы и имена, создать словарь, а затем применить np.digitize
к столбцу «Возраст». Наконец, используйте словарь для сопоставления имен вашей категории.
Обратите внимание, что для граничных случаев нижняя граница используется для отображения в ячейку.
import pandas as pd, numpy as np
df = pd.DataFrame({'Age': [99, 53, 71, 84, 84],
'Age_units': ['Y', 'Y', 'Y', 'Y', 'Y']})
bins = [0, 2, 18, 35, 65]
names = ['<2', '2-18', '18-35', '35-65', '65+']
d = dict(enumerate(names, 1))
df['AgeRange'] = list(map(d.get, np.digitize(df['Age'], bins)))
Результат
Age Age_units AgeRange
0 99 Y 65+
1 53 Y 35-65
2 71 Y 65+
3 84 Y 65+
4 84 Y 65+
Набор данных:
relationship_status col1 col2 col3 col4 col5 bday bday2
0 NaN 4.20 4.50 4.25 3.15 2.05 04-18 0418
1 1.0 4.60 2.95 3.95 3.10 3.10 07-20 0720
2 NaN 4.90 4.65 4.20 4.60 1.90 01-03 0103
3 NaN 3.85 2.80 3.55 2.65 3.50 09-16 0916
4 1.0 3.80 3.35 3.85 3.25 1.80 05-01 0501
bins = [120, 219, 321, 420, 521, 621, 723, 823, 923, 1023, 1122, np.inf]
names = ['Aquarius', 'Pisces', 'Aries', 'Taurus', 'Gemini', 'Cancer', 'Leo', 'Virgo', 'Libra', 'Scorpio', 'Sagittarius']
dataset['sunsign'] = pd.cut(dataset.bday2, bins, labels = names)
Я получаю ошибку: '& lt;' не поддерживается между экземплярами «float» и «str»
d = dict(enumerate(names, 1))
dataset['AgeRange'] = list(map(d.get, np.digitize(dataset['bday2'], bins)))
Я получаю следующую ошибку: не удается передать данные массива из dtype ('O') в dtype ('float64') в соответствии с правилом 'безопасный'
float('inf')
(илиnp.inf
) в конецbins
, а затем используйте:pd.cut(df.Age, bins, labels=names)
... Таким образом вы получите категориальную серию вместо строки ... – Jon Clements♦ 20 March 2018 в 12:02