如何将采样从几个月缩减到几年,还可以创建一个多级索引?

时间:2019-02-07 21:38:28

标签: python python-3.x pandas time-series

I need to convert a table which looks like

ID date_1 date_2 fill_value
1  01-02-2016 04-02-2016  1
1  08-03-2016 01-02-2017  3
2  03-03-2016 04-03-2016  7

ID 01-2016 02-2016 03-2016 04-2016 ... 12-2016
1  1        1       0      0 ...          0
1  0        3       3      3 ...          3
2  0        0       7      0 ...          0

最后是

ID 01-2016 02-2016 03-2016 04-2016 ... 12-2016
1  1        4       3      3 ...          3
2  0        0       7      0 ...          0

我尝试使用交叉表功能和上采样功能,然后运行for循环。它似乎可以工作,但是在我的机器上花费了3个多小时。有矢量化解决方案吗?

2 个答案:

答案 0 :(得分:0)

IIUC,请尝试以下操作:

df.set_index('ID')\
  .apply(lambda x: pd.Series(x['fill_value'], 
                             index=pd.date_range(x.date_1, x.date_2, freq='D')),
         axis=1)\
  .sum(level=0)

答案 1 :(得分:0)

我不确定要为从初始表到中间表的转换编写什么规则。

对于第二种转换,请尝试:

df.groupby('ID').sum()