DataFrame df
具有date
列以及具有float
值的许多其他列。其中一些值可以随机为null。另外,date
可以是非连续的(即,可能在这之间缺少几天)。对于每个非日期列,
1)如果值大于entryV
,则在每个月的第一天,保留其所有将来值,直到下面的#2。
2)现在在任何下一个月的第一天,如果#1之后的先前保留值的值下降到exitV
以下,则所有将来值都将在该列中设为NaN
,除非它们达到entryV
以后任何一个月的第一天。
下面是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)