【问题标题】:Fill missing data with equivalent value from the day before用前一天的等效值填充缺失的数据
【发布时间】:2017-07-18 09:14:07
【问题描述】:

我有一个数据框,里面装满了每小时的数据,其中有缺失值。日期充当索引,格式为 yyyy-mm-dd hh:mm。

对于我正在工作的上下文,简单地反映上面的值是不合适的。因此ffill 是不够的。最好反映前一天同一小时的值。

所以如果前一天 10:00 的值为“red”,则缺失的数据以“red”的值归档。

如果有人能帮我做这件事,他们会让我开心! :)

Date Time          |        Yeovilton
01/01/2012 00:00   |           12.4
01/01/2012 01:00   |           11.7
...
...
02/01/2012 00:00   |           5.9
01/01/2012 01:00   |           NaN

【问题讨论】:

  • 请发布示例数据

标签: python-3.x pandas missing-data


【解决方案1】:

按小时对数据进行分组并填写组:

ts.groupby(ts.index.hour).fillna(method='ffill')

您的问题是,正如您所指出的,ffill 是按顺序运行的,而您的数据不在您要填充的顺序中。但由于您的索引已经是一个时间戳,您可以很容易地提取小时,将其分组,然后填充到组内。

为了证明这是可行的(并展示如何为此制作示例数据):

import pandas as pd
import numpy as np

timestamps = [pd.Timestamp(t) for t in ['2011-01-01 10:00:00', '2011-01-01 12:00:00', '2011-01-02 10:00:00']]
colors = ['red', 'blue', np.nan]
ts = pd.Series(colors, index=timestamps)

print ts

# 2011-01-01 10:00:00     red
# 2011-01-01 12:00:00    blue
# 2011-01-02 10:00:00     NaN
# dtype: object

print ts.ffill()

# 2011-01-01 10:00:00     red
# 2011-01-01 12:00:00    blue
# 2011-01-02 10:00:00    blue
# dtype: object

print ts.groupby(ts.index.hour).ffill()

# 2011-01-01 10:00:00     red
# 2011-01-01 12:00:00    blue
# 2011-01-02 10:00:00     red
# dtype: object

【讨论】:

  • 谢谢 :) 我正在努力寻找包含示例数据的最佳方法。如果没有表的降价,48 小时的数据将上传得一团糟。你有什么建议吗?
  • 作为一般提示,我建议将您的样本数据限制在复制问题所需的最低限度。在您的情况下,您可以使用四到五行,其中索引是一个时间戳,其中至少有两个具有相同小时的非连续行,并且这些行中的第二个有缺失值。
  • @kosherdiah 这是一个关于生成样本数据的好帖子:stackoverflow.com/questions/20109391/…
  • 看起来不错,ASGM - 谢谢!刚刚出现了一些问题,但我会检查这是否对我有用,并在我回来后接受你的回答。你可能刚刚让我开心:)
  • 我正在添加一些对我有帮助的东西,希望它对其他人也能派上用场。我已经有一列充满日期,我需要将其转换为日期时间对象。我使用:df["Date Time"] = pd.to_datetime(df["Date Time"]) 来转换列。该列在我的数据框中称为“日期时间”
猜你喜欢
  • 2022-09-29
  • 2021-07-01
  • 2021-07-20
  • 2021-10-25
  • 1970-01-01
  • 1970-01-01
  • 2013-04-27
  • 1970-01-01
相关资源
最近更新 更多