为了账号安全,请及时绑定邮箱和手机立即绑定

在特定日期替换 Pandas DataFrame 中的 NaN(上采样)

在特定日期替换 Pandas DataFrame 中的 NaN(上采样)

慕田峪4524236 2021-11-30 17:02:34
我是 python 的新手,正在为以下示例而苦苦挣扎:我有一个带有 dateTime-Index 的 Pandas DataFrame 和一个带有盛宴的列。这是每日解决方案。import pandas as pdimport holidayshd = 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      Neujahrestag2018-04-01            Ostern2018-03-30        Karfreitag2018-04-02       Ostermontag2018-05-10          Auffahrt2018-05-20         Pfingsten2018-05-21     Pfingstmontag2018-08-01  Nationalfeiertag2018-12-25       Weihnachten现在我想要的数据不是每日分辨率,而是例如 6H 分辨率:f1 = f.resample('6H').asfreq()这如我所愿,并导致:date                     feastday        2018-01-01 00:00:00  Neujahrestag2018-01-01 06:00:00           NaN2018-01-01 12:00:00           NaN2018-01-01 18:00:00           NaN2018-01-02 00:00:00           NaN2018-01-02 06:00:00           NaN2018-01-02 12:00:00           NaN但是现在我想为所有 2018-01-01 填写例如“Neujahrstag”,而不仅仅是第一项。结果应如下所示(不仅适用于“Neujahrstag”,而且适用于 mit DataFrame f 中的所有项目)。具有相同日期的所有项目在盛宴中应具有相同的值。该日期的时间无关紧要: date                     feastday        2018-01-01 00:00:00  Neujahrestag2018-01-01 06:00:00  Neujahrestag2018-01-01 12:00:00  Neujahrestag2018-01-01 18:00:00  Neujahrestag2018-01-02 00:00:00           NaN2018-01-02 06:00:00           NaN2018-01-02 12:00:00           NaN我可以通过以下方式手动替换一项:f1['2018-01-01'] = f1['2018-01-01']['feastday'][0]这没有问题,但我没有为所有数据自动运行这些东西......我用for循环尝试过,但我没有成功。有谁能够帮助我。也许还有其他(更简单的)方法可以达到我的目标?在此先感谢您的帮助。
查看完整描述

2 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

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


查看完整回答
反对 回复 2021-11-30
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

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


查看完整回答
反对 回复 2021-11-30
  • 2 回答
  • 0 关注
  • 195 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信