python - 标记季节的最后一天
问题描述
我的数据集有问题,我想标记本季的最后一天(折扣,不是折扣),但我完全没有想法。标记应该是一个新变量(值 - 最后一天,标准日)
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']
推荐阅读
- cgaffinetransform - iOS 14 在自定义视图控制器演示期间处理转换的方式有什么不同吗?
- c - 参数可以与全局变量同名并且仍然在函数内部调用吗?
- python - Pandas apply().to_excel() 得到 DataFrame 不可调用
- javascript - 无法弄清楚为什么我无法从我的 API 中检索数据
- sql-server - 文件头因不同的数据库服务器而改变?
- raku - Raku 是否有与 Python 的 Struct 类似的功能?
- angular - 防止
在 Angular 的输出中标记 - office365 - 图库和表单视图在同一个屏幕上
- r - 如何使用 R Plotly 在后台将组和堆栈条形图与 layout.shape 结合起来?
- r - 在散点图中对当前数据点进行不同的着色