DataFrame df
имеет столбец date
вместе со многими другими столбцами со значениями float
.Некоторые из этих значений могут быть случайными.Кроме того, date
может быть непостоянным (т. Е. Между ними может отсутствовать несколько дней).Для каждого столбца без даты:
1) В 1-й день каждого месяца, если значение больше entryV
, сохраните все его будущие значения до # 2 ниже.
2) Теперь в 1-й день любого последующего месяца, если значение ранее сохраненных значений после # 1 упадет ниже exitV
, тогда все будущие значения в этом столбце составят NaN
, если только они не достигнут entryV
в 1-й деньснова любого будущего месяца.
Пример кадра данных df
ниже с entryV=41
и exitV=20
:
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
np.random.seed(100)
df = pd.DataFrame(np.random.randint(0,1000,size=(100, 10)).astype(float)/10, columns=list('ABCDEFGHIJ'))
df = df.mask(np.random.choice([True, False], size=df.shape))
df['date'] = [datetime.today() + timedelta(days=x) for x in range(0, 100)]
# df['month'] = df['date'].dt.month
# df['is_same_month'] = df['month'].diff().eq(0)
# df.drop('month', inplace=True, axis=1)