我有两个 Dataframe df 1包含每日数据
| 日期|工作日|高|低|
| --------------|--------------|--------------|--------------|
| 2016年1月1日|星期五|17144.85|一六八二三|
| 2016年1月4日|星期一|一万七千|16603|
| 2016年1月5日|星期二|一六七○ ○|16516.65|
| 2016年1月6日|星期三|16659.3|16376|
| 2016年1月7日|星期四|16344.4|16058|
| 2016年1月8日|星期五|16264|16126.05|
| 2016年1月11日|星期一|16186|15841.4|
| 2016年1月12日|星期二|16125.3|15723.3|
| 2016年1月13日|星期三|15974|15536|
| 2016年1月14日|星期四|15808.7|15455|
| 2016年1月15日|星期五|15639|15161.5|
| 2016年1月18日|星期一|15347|14985.35|
| 2016年1月19日|星期二|15348|15083.65|
| 2016年1月20日|星期三|15060|一四七三○|
| 2016年1月21日|星期四|15360|14901|
| 2016年1月22日|星期五|15607.8|15261|
| 2016年1月25日|星期一|15681.3|15460|
| 2016年1月27日|星期三|15629.2|15412.65|
| 2016年1月28日|星期四|15564.9|15355|
| 2016年1月29日|星期五|一五五七八|15171.6|
我想做的是基于df 1需要创建一个新的dataframe并存储所选周的前一周累积的高和低。
对于“当前周高”和“当前周低”(CWH和CWL)列,它以一种方式存储一周中每个日期的当前周高/低,一周中的每个日期保持像Max(周的开始日期,周的选定日期)这样的值,并将一周中的每个开始日期标记为“无”
**例如:**让我们取第1周是1月4日至1月8日,第2周是1月11日至1月15日,第1周没有任何前一周,因此在新的数据框中,从第4日到第8日的所有日期将在前一个高/低列中保持无。第2周前一周是第1周,因此第2周的所有日期将保持最大高和最小低。
当前CWH和CWL:在第1周中,4th jan是一周的开始日,因此标记为None,5th Jan是max(4th,5th),6 th jan max(4th,6 th),所有周以此类推
预期输出:
| 日期|PWH|PWL|CWH|CWL|
| --------------|--------------|--------------|--------------|--------------|
| 2016年1月1日|- -|- -|- -|- -|
| 2016年1月4日|17144.85|一六八二三|- -|- -|
| 2016年1月5日|17144.85|一六八二三|一万七千|16603|
| 2016年1月6日|17144.85|一六八二三|一万七千|16516.65|
| 2016年1月7日|17144.85|一六八二三|一万七千|16376|
| 2016年1月8日|17144.85|一六八二三|一万七千|16058|
| 2016年1月11日|一万七千|16058|- -|- -|
| 2016年1月12日|一万七千|16058|16186|15841.4|
| 2016年1月13日|一万七千|16058|16186|15723.3|
| 2016年1月14日|一万七千|16058|16186|15536|
| 2016年1月15日|一万七千|16058|16186|15455|
| 2016年1月18日|16186|15161.5|- -|- -|
| 2016年1月19日|16186|15161.5|15347|14985.35|
| 2016年1月20日|16186|15161.5|15348|14985.35|
| 2016年1月21日|16186|15161.5|15348|一四七三○|
| 2016年1月22日|16186|15161.5|15360|一四七三○|
| 2016年1月25日|15607.8|一四七三○|- -|- -|
| 2016年1月27日|15607.8|一四七三○|15681.3|15460|
| 2016年1月28日|15607.8|一四七三○|15681.3|15412.65|
| 2016年1月29日|15607.8|一四七三○|15681.3|15355|
尝试了这个代码:
temp_wk = daily_df.copy()
temp_wk.set_index(pd.to_datetime(temp_wk['Date']), inplace=True)
weekly_high = temp_wk['Low'].resample('W').min()
prev_week_high = weekly_high.shift(1)
print(prev_week_high)
但这并没有给出可接受的产出。
2条答案
按热度按时间piok6c0g1#
IIUC,这应该可以实现你想要的:
6vl6ewon2#
这是我的解决方案