s = pandas.Series([True,False,True,True,False]) len(s)==5
в то время как len(s[:-1]) == len(s[1:]) = 4,
len(s[:-1]) == len(s[1:]) = 4
поэлементная комбинация AND len(s[1:] & s[:-1]) = 5,
len(s[1:] & s[:-1]) = 5
даже len(s[1:].copy() & s[:-1].copy()) = 5
len(s[1:].copy() & s[:-1].copy()) = 5
окружение python3 0,6 на Jupyter, pandas 0,21,0
Это потому, что логическая & поэлементная логическая операция строго основана на индексации. А комбинация двух неправильно проиндексированных рядов дает None, что рассматривается как False. Комбинация является полным объединением, поэтому конечная длина составляет len(s) == len(s[1:] & s[:-1]) = 5.
&
None
False
len(s) == len(s[1:] & s[:-1]) = 5