python - 在特定日期替换 pandas DataFrame 中的 NaN(上采样)
问题描述
我是 python 新手,我正在为以下示例而苦苦挣扎:我有一个带有 dateTime-Index 的 pandas DataFrame 和一个带有 feastdays 的列。这是每日分辨率。
import pandas as pd
import holidays
hd = holidays.Switzerland(years=[2018])
f = pd.DataFrame(hd.items())
f.columns = ['date', 'feastday']
f['date'] = pd.to_datetime(f['date'])
f = f.set_index('date')
这看起来像这样:
date feastday
2018-01-01 Neujahrestag
2018-04-01 Ostern
2018-03-30 Karfreitag
2018-04-02 Ostermontag
2018-05-10 Auffahrt
2018-05-20 Pfingsten
2018-05-21 Pfingstmontag
2018-08-01 Nationalfeiertag
2018-12-25 Weihnachten
现在我想要的数据不是每日分辨率,而是例如 6H 分辨率:
f1 = f.resample('6H').asfreq()
这如我所愿,并导致:
date feastday
2018-01-01 00:00:00 Neujahrestag
2018-01-01 06:00:00 NaN
2018-01-01 12:00:00 NaN
2018-01-01 18:00:00 NaN
2018-01-02 00:00:00 NaN
2018-01-02 06:00:00 NaN
2018-01-02 12:00:00 NaN
但现在我想为所有 2018-01-01 填写例如“Neujahrstag”,而不仅仅是第一项。结果应该是这样的(不仅对于“Neujahrstag”,对于 mit DataFrame f 中的所有项目)。所有具有相同日期的项目在 feastday 中应具有相同的值。那个日期的时间无关紧要:
date feastday
2018-01-01 00:00:00 Neujahrestag
2018-01-01 06:00:00 Neujahrestag
2018-01-01 12:00:00 Neujahrestag
2018-01-01 18:00:00 Neujahrestag
2018-01-02 00:00:00 NaN
2018-01-02 06:00:00 NaN
2018-01-02 12:00:00 NaN
我可以通过以下方式手动替换一项:
f1['2018-01-01'] = f1['2018-01-01']['feastday'][0]
这没有问题,但我没有为所有数据自动运行这些东西......我用for循环尝试过,但我没有成功。有谁能够帮我。也许还有其他(更简单)的方法可以达到我的目标?在此先感谢您的帮助。
马可
解决方案
使用模式按天分组df.groupby(df.index.day)
是一种方法:
f1 = f.resample('6H').asfreq()
res = f1.groupby(f1.index.day).ffill()[['feastday']]
res.head(7)
feastday
date
2018-01-01 00:00:00 Neujahrestag
2018-01-01 06:00:00 Neujahrestag
2018-01-01 12:00:00 Neujahrestag
2018-01-01 18:00:00 Neujahrestag
2018-01-02 00:00:00 NaN
2018-01-02 06:00:00 NaN
2018-01-02 12:00:00 NaN
推荐阅读
- docker - 无法访问 VirtualBox 虚拟机上的 pod
- c++ - 在 macos 上选择屏幕部分 ffmpeg c++
- jmeter - 如何为每个控制器传递多个值
- php - 升级到 Laravel 8 时出现内部服务器错误 500
- java - Spring Batch - 处理工作人员配置错误
- html - 导航栏下拉菜单不起作用 Bootstrap 下拉锚点在单击时不起作用
- ag-grid - React/Typescript Ag-grid:“无法读取未定义的属性‘addOrRemoveCssClass’”
- typescript - 是否可以在多参数函数中使用一种类型?
- c++ - 如何将图像从彩色去饱和到黑白?
- cypress - 赛普拉斯:如何从一个页面上的选择器中捕获文本以用作另一页面上的文本