使用panda填充最后已知的时间序列数据



这是我问的一个类似问题的变体:用pandas 填充最后已知的数据

简而言之,我想知道如何转发填充时间序列数据,同时注意每个数据点的ID。

ergo,这个

2014-07-24 17:49:00   5   1046.0   -3.0   -239.0   2800.0
...
2015-05-05 15:00:00   2     NaN     NaN     NaN    2680 
2015-05-05 15:00:00   3     0989      0020     -0011    2680
2015-05-05 15:00:00   4    1022      0060     -0076    2600 
2015-05-05 15:00:00   5     NaN     NaN     NaN    2623 

成为

2015-05-05 15:00:00   2     NaN     NaN     NaN    2680 
2015-05-05 15:00:00   3     0989      0020     -0011    2680
2015-05-05 15:00:00   4    1022      0060     -0076    2600 
2015-05-05 15:00:00   5     1046     -3.0     -239.0    2623

注意ID=5的最后已知数据来自2014-07-24 17:49:00

现在的变化是做同样的事情,只是它应该考虑数据的"有效期"。我尝试做的是分配一个datetimeIndex,然后从该空闲时间段df[start:end]中切片数据帧,然后修复我之前的问题。

然而,这导致了一个单独的子集,而不是我的"大"数据帧。我需要的是对我的"大数据帧"进行操作,并能够移动这个窗口和所有数据。

您可以groupby"id"列,然后调用ffill:

In [95]:
df.groupby(['id'], as_index=False).ffill()
Out[95]:
             datetime  id     a   b    c     d
0 2014-07-24 17:49:00   5  1046  -3 -239  2800
1 2015-05-05 15:00:00   2   NaN NaN  NaN  2680
2 2015-05-05 15:00:00   3   989  20  -11  2680
3 2015-05-05 15:00:00   4  1022  60  -76  2600
4 2015-05-05 15:00:00   5  1046  -3 -239  2623

Pandas有一个TimeGrouper对象,它可以帮助您对具有Datetime按时间间隔索引。分组操作可以通过'id':嵌套到另一组

import numpy as np
import pandas as pd
df = pd.DataFrame([['2014-07-24 17:49:00', 5, 1046.0, -3, -239, 2800],
                   ['2015-05-05 15:00:00', 2, np.nan, np.nan,np.nan, 2680],
                   ['2015-05-05 15:00:00', 3,  989, 20, -11, 2680], 
                   ['2015-05-05 15:00:00', 4, 1022, 60, -76, 2600], 
                   ['2015-05-05 15:00:00', 5, np.nan, np.nan, np.nan, 2623]], 
                  columns='timestamp id A B C D'.split())
df['timestamp'] = pd.DatetimeIndex(df['timestamp'])
df = df.set_index(['timestamp'])
print(df.groupby(pd.TimeGrouper('300D'), group_keys=False)
      .apply(lambda grp: grp.set_index(['id'], append=True)
             .groupby(level='id').ffill()))

产生

                           A   B    C     D
timestamp           id                     
2014-07-24 17:49:00 5   1046  -3 -239  2800
2015-05-05 15:00:00 2    NaN NaN  NaN  2680
                    3    989  20  -11  2680
                    4   1022  60  -76  2600
                    5   1046  -3 -239  2623

最新更新