Проблема среза в C ++ возникает из семантики значений ее объектов, которая оставалась в основном из-за совместимости с C-структурами. Вам нужно использовать явный синтаксис ссылок или указателей для достижения «нормального» поведения объекта, который встречается на большинстве других языков, которые выполняют объекты, т. Е. Объекты всегда передаются по ссылке.
Короткими ответами являются то, что вы нарезаете объект путем присвоения производного объекта базовому объекту значением , то есть оставшийся объект является лишь частью производного объекта. Чтобы сохранить семантику стоимости, нарезка является разумным поведением и имеет относительно редкое применение, которое не существует на большинстве других языков. Некоторые люди считают это особенностью C ++, в то время как многие считают ее одной из особенностей / недостатков C ++.
Вы можете использовать маску , чтобы найти нужные записи
import datetime
df = pd.DataFrame([['1','2008-04-02','2008-07-10']],
columns=['license', 'issue', 'expire'])
parse_date = lambda x: return datetime.datetime.strptime(x, '%Y-%m-%d')
dt = parse_date('2008-06-01')
date_between = lambda x: parse_date(x['issue']) > dt and parse_date('expire') < dt
df = df[df.apply(date_between)]
. Таким образом, вы можете использовать список для сохранения результата:
s = []
for ds in active_day:
dt = parse_date(ds)
n = df[df.apply(date_between)].license.count()
s.append((dt, n))
result_df = df.DataFrame(s, columns=['active_day', 'count'])