我希望能够根据交易表确定时间点上的持仓,像这样...
transaction date amount
initial 2018-10-12 3
additional1 2018-10-13 1
additional2 2018-10-15 5
输出将显示所选日期范围内每个日期的馆藏...
date holdings
2018-10-11 0
2018-10-12 3
2018-10-13 4
2018-10-14 4
2018-10-15 9
我觉得这类问题一定要在stackoverflow之前的某个地方得到回答,但是如果我能找到它,那就麻烦我了!
我首先以选定的日期范围填充数据框索引:
pd.DataFrame(index=pd.date_range(start='2018-10-11', end=date.today()))
我在想下一步是对groupby和cumsum使用for循环,但是我无法解决。还担心在大型数据集上使用循环会很慢。
任何帮助将不胜感激。
答案 0 :(得分:1)
使用类似这样的内容:
In [186]: df1
Out[186]:
amount date
0 3 2018-10-12
1 1 2018-10-13
2 5 2018-10-15
In [188]: df
Out[188]:
date
0 2018-10-11
1 2018-10-12
2 2018-10-13
3 2018-10-14
4 2018-10-15
5 2018-10-16
In [192]: d2 = pd.merge(df,df1,on='date', how='left')
In [193]: d2['cumulative'] = d2.amount.cumsum()
In [195]: d2
Out[195]:
date amount cumulative
0 2018-10-11 NaN NaN
1 2018-10-12 3.0 3.0
2 2018-10-13 1.0 4.0
3 2018-10-14 NaN NaN
4 2018-10-15 5.0 9.0
5 2018-10-16 NaN NaN
In [202]: d2 = d2.fillna(method='ffill')
In [203]: d2
Out[203]:
date amount cumulative
0 2018-10-11 NaN NaN
1 2018-10-12 3.0 3.0
2 2018-10-13 1.0 4.0
3 2018-10-14 1.0 4.0
4 2018-10-15 5.0 9.0
5 2018-10-16 5.0 9.0