Лучший способ справиться с соответствием месяца - использовать векторизацию в пандах и сделать следующее:
new_column = (df.date1.dt.month == df.date2.dt.month).astype(int)
То есть избегать использования apply()
вместо DataFrame
(что, вероятно, будет итеративным) и воспользоваться преимуществом базовой numpy
векторизации. Ворота к такой функциональности почти всегда находятся в семействах Series
функций и свойств, таких как семейство dt
для дат, семейство str
для строк и т. Д.
К счастью, у вас есть предварительноВычислили членство id_list в вашем bool_column
, поэтому, чтобы добавить членство в качестве критерия, просто сделайте следующее:
new_column = ((df.date1.dt.month == df.date2.dt.month) & df.bool_column).astype(int)
Еще раз, &
из двух Series
использует векторизацию. Вы остаетесь в логическом пространстве до конца, а затем преобразуетесь в int
с astype(int)
. Анализируя ваш код, мне приходит в голову, что итеративная проверка вашего id_list может быть настоящим ударом по производительности, даже больше, чем DataFrame.apply()
. Что бы вы ни делали, любой ценой избегайте повторения вашего id_list в каждой строке, поскольку у вас уже есть вектор, обозначающий членство в ваших bool_column
.
Кстати, я считаю, что в ваших примерах данных есть небольшая ошибка,Значение new_column
для вашей третьей строки должно быть 0
, поскольку ваше значение bool_column
равно 0
.