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个多小时。有矢量化解决方案吗?
答案 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()