我的数据集有一个问题,我想标记出赛季的最后一天(折扣,不打折),我绝对没有想法。标记应为新变量(值-最后一天,标准日期)
data = {
'start_day': [
'2008-01-01',
'2008-01-02',
'2008-01-03',
'2008-01-04',
'2008-01-05'
],
'start_day_no': [
1,
2,
3,
4,
5
],
'Season': [
'Discount',
'Discount',
'No_discount',
'No_discount',
'Discount'
],
}
frame = pd.DataFrame(data)
因此,如果我查看完整的数据集,我想标记折扣季节的最后一天(蓝色)和标准价格的最后一天(红色),但是条件是该季节至少持续20天(因此红色开始2016年不算作一个季节)。
有什么提示吗?谢谢!!!!
您可以按照以下步骤进行操作:
创建一年的模拟数据:
df = pd.DataFrame({'Season':['No_discount']*16+
['Discount']*90+
['No_discount']*202+
['Discount']*25+
['No_discount']*33},
index=pd.date_range('2016-01-01','2016-12-31', freq='D'))
df['grp'] = (df['Season'] != df['Season'].shift()).cumsum()
df['grp_size'] = df.groupby('grp').transform('count')
df.groupby('grp').tail(1).query('grp_size >= 20') #Filtering groups smaller than 20
输出:
Season grp grp_size
2016-04-15 Discount 2 90
2016-11-03 No_discount 3 202
2016-11-28 Discount 4 25
2016-12-31 No_discount 5 33
数据框的索引是每个组的最后日期。
df_out = df.groupby('grp').tail(1).query('grp_size >= 20')
df_out.index.strftime('%Y-%m-%d').tolist()
输出:
['2016-04-15', '2016-11-03', '2016-11-28', '2016-12-31']
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句