Python 在特定日期替换数据帧中的NaN(上采样)

Python 在特定日期替换数据帧中的NaN(上采样),python,pandas,datetimeindex,Python,Pandas,Datetimeindex,我是python新手,我正在努力学习以下示例: 我有一个带有dateTime索引的pandas数据框架和一个带有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

我是python新手,我正在努力学习以下示例: 我有一个带有dateTime索引的pandas数据框架和一个带有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数据帧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循环,但没有成功。有人能帮我吗。也许还有其他(更简单的)方法来实现我的目标?提前感谢你的帮助


Marco

使用
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

在这种情况下,请将
.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')

非常感谢,这正是我需要的。很好,谢谢你的主意,彼得。我只需将df.index.day更改为df.index.date,就可以了。