PHP проходит через контрольную разницу между равными амперсандам и равными пробелу ampersand [duplicate]

На мой взгляд, вы не должны использовать вложенные 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+

73
задан Peter Mortensen 6 December 2015 в 00:33
поделиться

2 ответа

Это не устарело и вряд ли будет. Это стандартный способ, например, сделать часть одного или нескольких изменений зеркал объекта, сделанных для другого, вместо копирования существующих данных.

Это называется присвоением по ссылке, которое, цитируя руководство, "означает, что обе переменные в конечном итоге указывают на одни и те же данные, и ничто не копируется нигде" .

Единственное, что является устаревшим с =& «присваивает результат new ссылкой» в PHP & nbsp; 5 , который может быть источником какой-либо путаницы. new автоматически назначается ссылкой, поэтому & является избыточным / устаревшим в $o = &new C;, но не в $o = &$c;.


Так как его трудно найти, обратите внимание, что =& ( равно амперсанду ) совпадает с = & ( равно амперсанду пространства ) и часто записывается так, что он попадает в другую переменную типа $x = &$y['z']; или $x = &$someVar ( имя переменной амперсанда и знака доллара ). Пример, упрощенный из документов:

$a = 3;
$b = &$a;
$a = 4;
print "$b"; // prints 4

Вот удобная ссылка на подробный раздел по Assign By Reference в руководстве по PHP . Эта страница является частью серии по ссылкам - стоит потратить минуту, чтобы прочитать всю серию.

79
ответ дан user568458 28 August 2018 в 07:02
поделиться
$x = &$y['z'];

также имеет эффект создания $y['z'], если он не существует, и установите его на null.

Это предотвращает сообщения об ошибках, которые вы, возможно, хотели прочитать. Я еще не нашел документацию по этому поводу; возможно, новый в 5.3, насколько мне известно.

21
ответ дан Peter Mortensen 28 August 2018 в 07:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: