【问题标题】:Convert weekly data into daily data with Python使用 Python 将每周数据转换为每日数据
【发布时间】:2017-06-16 01:22:40
【问题描述】:

我会尽量在这个问题上说清楚。假设我有一个数据框,格式如下:

Date          Quantity
05/05/2017    34
12/05/2017    24
19/05/2017    45
26/05/2017    23
2/06/2017     56
9/06/2017     32

我想将此具有每周数据(如您所见)的数据框转换为具有每日数据的数据框。但是,我的数据框中会有一些“漏洞”(例如周末)。我已经将每日日期存储到另一个变量中。 我想得到这样的东西:

Date          Quantity
05/05/2017    34
08/05/2017    34
09/05/2017    34
...           ...
2/06/2017     56
5/06/2017     56
6/06/2017     56
...           ...

我的想法是有一个循环显示“只要日期早于每周数据框中的日期(例如 19/05/2017)但高于前一个日期(因此 12/05/2017),我想要在每日数据框中的“数量”列中附加正确的数字(在本例中为 45)。

但是,我不知道如何在 Python 中执行此操作。我应该将日期转换为数字然后再转换回日期吗?有没有人有更快的方法来做到这一点?非常感谢

【问题讨论】:

  • 您实际上并没有将每日日期用于任何事情,那么有什么意义呢?为什么要转换它?
  • 或者,在更一般的意义上,通过将每周转换为每天,您不会获得更多数据。您的逻辑应该能够逐周检查还是逐日检查
  • 我只是想保持我的代码简单。我需要以这种方式将数据附加到包含每日数据的巨大数据框中。问题是,对于这个专栏,我只有每周数据

标签: python pandas dataframe


【解决方案1】:

这是一个使用 resamplebusiness day frequency (B) 和前向填充的选项:

df['Date'] = pd.to_datetime(df.Date, format='%d/%m/%Y')    
df.set_index('Date').resample('B').ffill().reset_index()

#         Date  Quantity
#0  2017-05-05      34
#1  2017-05-08      34
#2  2017-05-09      34
#...
#20 2017-06-02      56
#21 2017-06-05      56
#22 2017-06-06      56
#...

【讨论】:

  • 这没有考虑问题的缺失值部分。不过,可以将此输出与所需日期的单列数据框resampled_df.merge(days, how='right') 合并,以获得目标输出。
  • @EFT 你是对的。我错过了那部分。具有工作日频率的resample 应该可以解决此问题。
  • 要以一天的频率正常使用此功能,请使用resample('D')
【解决方案2】:

如果我们说您的每日数据位于名为days 的变量中,而Date 是您的索引,那么

>>>df.reindex(days).fillna(method='ffill')

应该返回你想要的。

【讨论】:

  • 这就是我要找的答案,非常感谢
猜你喜欢
  • 2020-07-06
  • 2021-04-28
  • 2013-05-02
  • 1970-01-01
  • 2020-06-13
  • 2016-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多