我是python的新手,但我在下面的示例中苦苦挣扎:我有一个带dateTime-Index的pandas DataFrame和一个带有节日的列。这是日常解决方案。
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中的所有项目)。具有相同日期的所有项目在节日中应具有相同的值。该日期的时间无关紧要:
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循环,但没有成功。有谁能够帮助我。也许还有另一种(更简单的)方法可以达到我的目标?在此先感谢您的帮助。
马可
在这种情况下,请.ffill
与limit
参数一起使用,因为您的频率是6个小时,一天中有24个小时。
df.resample('6H').ffill(limit=3)
# 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
#...
通常,如果事情没有平均分摊,就进行分组分组变换。
df = df.resample('6H').asfreq()
df.groupby(df.index.date).transform('first')
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句